{
    "archive_path": "archive/1765895860.102953",
    "base_url": "simonwillison.net/2025/Apr/26/o3-photo-locations",
    "basename": "",
    "bookmarked_date": "2025-12-16 14:37",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/simonwillison.net/2025/Apr/26/o3-photo-locations",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=simonwillison.net",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": null
    },
    "domain": "simonwillison.net",
    "downloaded_at": "2025-12-16T14:37:50.296391+00:00",
    "downloaded_datestr": "2025-12-16 14:37",
    "extension": "",
    "hash": "1WSF570Q9DE29CD6CEF6",
    "history": {
        "archive_org": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://web.archive.org/save/https://simonwillison.net/2025/Apr/26/o3-photo-locations/"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-12-16T14:39:50.945527+00:00",
                "index_texts": null,
                "output": "TimeoutExpired: Command '['/usr/bin/curl', '--silent', '--location', '--compressed', '--proxy', 'socks5://tor-socks-proxy:9150', '--head', '--max-time', '60', '--user-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)', 'https://web.archive.org/save/https://simonwillison.net/2025/Apr/26/o3-photo-locations/']' timed out after 60 seconds",
                "pwd": "/data/archive/1765895860.102953",
                "schema": "ArchiveResult",
                "start_ts": "2025-12-16T14:38:50.760774+00:00",
                "status": "failed"
            }
        ],
        "dom": [
            {
                "cmd": [
                    "/usr/bin/chromium-browser",
                    "--proxy-server=socks5://tor-socks-proxy:9150",
                    "--disable-features=DarkMode",
                    "--run-all-compositor-stages-before-draw",
                    "--hide-scrollbars",
                    "--autoplay-policy=no-user-gesture-required",
                    "--no-first-run",
                    "--use-fake-ui-for-media-stream",
                    "--use-fake-device-for-media-stream",
                    "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'",
                    "--headless=new",
                    "--no-sandbox",
                    "--no-zygote",
                    "--disable-dev-shm-usage",
                    "--disable-software-rasterizer",
                    "--disable-sync",
                    "--window-size=1440,2000",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "--user-data-dir=/data/personas/Default/chrome_profile",
                    "--profile-directory=Default",
                    "--dump-dom",
                    "https://simonwillison.net/2025/Apr/26/o3-photo-locations/"
                ],
                "cmd_version": "131.0.6778",
                "end_ts": "2025-12-16T14:38:13.615801+00:00",
                "index_texts": null,
                "output": "output.html",
                "pwd": "/data/archive/1765895860.102953",
                "schema": "ArchiveResult",
                "start_ts": "2025-12-16T14:38:02.879485+00:00",
                "status": "succeeded"
            }
        ],
        "favicon": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--max-time",
                    "60",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://www.google.com/s2/favicons?domain=simonwillison.net"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-12-16T14:37:54.423273+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1765895860.102953",
                "schema": "ArchiveResult",
                "start_ts": "2025-12-16T14:37:50.993054+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://simonwillison.net/2025/Apr/26/o3-photo-locations/"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-12-16T14:37:54.741513+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1765895860.102953",
                "schema": "ArchiveResult",
                "start_ts": "2025-12-16T14:37:54.566788+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [
            {
                "cmd": [
                    "(internal) archivebox.extractors.htmltotext",
                    "./{singlefile,dom}.html"
                ],
                "cmd_version": "0.8.5rc51",
                "end_ts": "2025-12-16T14:38:36.656441+00:00",
                "index_texts": [
                    "(https://simonwillison.net/2025/Apr/26/o3-photo-locations/) Watching o3 guess a photo\u2019s location is surreal, dystopian and wildly entertaining (Atom) (/atom/everything/) (/static/css/all.css) (https://webmention.io/simonwillison.net/webmention) (https://webmention.io/simonwillison.net/xmlrpc)  (/) Simon Willison\u2019s Weblog  (/about/#subscribe) Subscribe   Watching o3 guess a photo\u2019s location is surreal, dystopian and wildly entertaining 26th April 2025 Watching OpenAI\u2019s new o3 model guess where a photo was taken is one of those moments where decades of science fiction suddenly come to life. It\u2019s a cross between the (https://tvtropes.org/pmwiki/pmwiki.php/Main/EnhanceButton) Enhance Button and (https://tvtropes.org/pmwiki/pmwiki.php/Main/OmniscientDatabase) Omniscient Database TV Tropes. The process is simple. Snap a photograph of somewhere, ideally without putting any obvious landmarks in there. Feed it to (https://www.chatgpt.com/) ChatGPT o3 or o4-mini (currently only available on the $20/month Plus plan) and prompt \u201cGuess where this photo was taken\u201d. Let it churn. (I found I needed to turn off all of ChatGPT\u2019s memory features first or it would cheat and use context from my previous conversations.) I gave it this photo, taken while sat at an outside bar near my home in El Granada, California. I think it\u2019s a pretty solid challenge: not many identifying features, just a bit of road, an anonymous house and some hills in the background: (Residential scene with a cream-colored house with gray roof, white picket fence, and two white vehicles parked nearby. In the foreground is a glass-enclosed fire table and orange flowers. Background shows hills under an overcast sky with power lines crossing above. A person in red stands between vehicles near a yellow directional sign.)  ... and off it went. I\u2019ve shared (https://chatgpt.com/share/680c6160-a0c4-8006-a4de-cb8aff785f46) the full transcript here \u2014be sure to expand the \u201cThought for 6m 48s\u201d link to see the full details of how it attacked the problem. It starts with a very weird mistake: it briefly pretends that it can\u2019t see the image at all: The user uploaded an image and is asking me to guess the location. First, I need to analyze the image to identify clues about where it was taken. Since I can\u2019t actually see images, I\u2019ll rely on the metadata. I see the resolution is 1024x768, and I\u2019ll consider any textual information if available for clues. Unfortunately, I don\u2019t have access to the image visually, so I\u2019ll proceed with this approach.  Then it snaps out of that and starts using its vision abilities: The image shows a residential neighborhood with small houses, one of which is light green with a white picket fence and a grey roof. The fire pit and signposts hint at a restaurant or cafe, possibly near the coast. The environment, with olive trees and California poppies, suggests a coastal California location, perhaps Central Coast like Cambria or Morro Bay. The pastel-colored houses and the hills in the background resemble areas like Big Sur. A license plate could offer more, but it\u2019s hard to read.  Now here\u2019s where it leaps straight into science fiction: Alright, I\u2019m going to zoom into the license plate to try to confirm the state, as it could help identify the location more precisely. The plate might give me clues about where this photo was taken, especially if it\u2019s from a recognizable state. Let\u2019s see if that\u2019s visible enough to be useful!  It runs some Python code! # crop license plate area w , h = img .size # approximate area: roughly center x maybe 1700? Actually width is likely > 3024? Let's print size print (img .size )\n\n(3456 , 4608 )  Frustratingly the shared conversation doesn\u2019t include most of the other Python it used (the sharing feature is still quite buggy). Here\u2019s a screenshot of what happened next: (| want to crop a small bounding box around the license plate. The car behind the picket fence is likely near the center, so I'll focus on that area. I'll define the region with approximate coordinates: x 1500 to 2000 and y 2500 to 3000. By selecting this region, I can better evaluate the plate and see if it's clearer to identify. Let's manually crop and inspect it. Then it says Analyzing Data, and runs Python code: crop = img.crop( (1300, 2400, 2200, 3200)); plt.imshow (crop); plt.axis( off\"); Output is (-0.5, 899.5, 799.5, -0.5). It shows the cropped photo and says: The license plate appears to follow the standard California design \u2014 white background with red characters. To be sure, I'll zoom in on the area around the plate to check for more details and confirm the state. This could give me a stronger clue as to where the photo was taken. Let's see if it's clearer now!)  It kept running like this for six more minutes \u2014cropping and zooming to an area of the photo, musing about what it could see, comparing it to previous observations and then cropping and zooming and analyzing again. To cut straight to the end, here\u2019s the final answer it came up with: I\u2019m getting strong Central-Coast-California vibes from this scene: Clue What it suggests   California-style license plate on the SUV We\u2019re almost certainly in CA  Masses of blooming California poppies, an olive tree, and a cool, marine-layer sky Typical coastal\u2010central-CA vegetation and weather  Low pastel beach cottages with white picket fences and a rope-and-post patio rail Common architecture in the little beach towns between Santa Cruz and Pismo  Rolling green coastal range right behind town (no tall peaks, no snow) Fits the Santa Lucia / Santa Cruz coastal hills    Put together, that points to one of the small Highway 1 villages. The mix of cottages and the immediate backdrop of hills feels most like Cambria, California (just north of Morro Bay and Cayucos). I\u2019d guess you snapped this from a caf\u00e9 patio in Cambria\u2019s West Village, a block or two in from Moonstone Beach Drive. (If I\u2019m off, my next guess would be Half Moon Bay\u2013El Granada further north\u2014but Cambria is my first instinct!)  How did it do? Central Coast California was exactly right. Cambria, California was about 200 miles off... but the \u201cmy next guess\u201d was spot on! The photo was indeed taken in El Granada, a tiny town just north of Half Moon Bay. I\u2019m confident it didn\u2019t cheat and look at the EXIF data on the photograph, because if it had cheated it wouldn\u2019t have guessed Cambria first. If you\u2019re still suspicious, try stripping EXIF by taking a screenshot and run an experiment yourself\u2014I\u2019ve tried this and it still works the same way. Update: vessenes on Hacker News (https://news.ycombinator.com/item?id=43732506#43732866) reported an instance where it did use the (https://pillow.readthedocs.io/en/stable/reference/ExifTags.html) ExifTags package and lie about it, but it was at least visible (https://chatgpt.com/share/6802e229-c6a0-800f-898a-44171a0c7de4) in the thinking trace . o3 certainly isn\u2019t the only model that can do this: I\u2019ve tried similar things with Claude 3.5 and 3.7 Sonnet and been impressed by the results there as well, although they don\u2019t have that extravagant ability to \u201czoom\u201d. How much does the zooming actually help? My suspicion is that the model\u2019s vision input operates at quite a low resolution, so cropping closer to a license plate does have a meaningful impact on the process. I\u2019m not sure it justifies 25 separate cropping operations for one photo though, that feels a little performative to me. Here\u2019s (https://claude.ai/share/231756c9-6fe6-4f63-9f34-c6c7e1299a44) Claude 3.7 Sonnet \u201cextended thinking\u201d guessing \u201ca small to mid-sized California coastal town\u201d. I tried (https://gemini.google.com/) Gemini but it cheated and said \u201cGiven that my current location context is El Granada, California...\u201d\u2014so I tried Gemini 2.5 Pro via their API (https://gist.github.com/simonw/6a5a9407326d8366105f95e5524f3694) and got a confidently incorrect guess of \u201cthe patio of The Hidden Kitchen restaurant in Cayucos, California\u201d. What\u2019s different here with o3, (https://simonwillison.net/2025/Apr/21/ai-assisted-search/#o3-and-o4-mini-are-really-good-at-search) as with search , is that the tool usage is integrated into the \u201cthinking\u201d phase of the response. Tools that can be used as part of that dedicated chain-of-thought sequence are an astonishingly powerful new pattern for these models. I expect we\u2019ll see this from other vendors soon. What to make of this? (/2025/Apr/26/o3-photo-locations/#what-to-make-of-this-) #  First, this is really fun . Watching the model\u2019s thought process as it churns through the photo, pans and zooms and discusses different theories about where it could be is wildly entertaining . It\u2019s like living in an episode of CSI. It\u2019s also deeply dystopian . Technology can identify locations from photographs now. It\u2019s vitally important that people understand how easy this is\u2014if you have any reason at all to be concerned about your safety, you need to know that any photo you share\u2014even a photo as bland as my example above\u2014could be used to identify your location. As is frequently the case with modern AI, the fact that this technology is openly available to almost anyone has negative and positive implications. As with image generation, it\u2019s important that people can see what this stuff can do first hand. Seeing this in action is a visceral lesson in what\u2019s now possible. Update: o3 does have rough location access (/2025/Apr/26/o3-photo-locations/#update-o3-does-have-rough-location-access) #  I\u2019m embarrassed that I didn\u2019t think to check this, but it turns out o3 does have (https://chatgpt.com/share/680ceb49-a184-8006-9979-d73169325297) a loose model of your location made available to it now \u2014presumably as part of its improved search feature. It knows I\u2019m in Half Moon Bay. The location guessing trick still works independently of that though. I tried it on photos\nI\u2019d taken thousands of miles from my location (EXIF stripped via screenshotting)\u2014one in rural Madagascar ((https://static.simonwillison.net/static/2025/madagascar.jpg) photo , (https://chatgpt.com/share/680cec52-e0d4-8006-bf80-952888b018fd) transcript ), one in urban Buenos Aires ((https://static.simonwillison.net/static/2025/buenos-aires.jpg) photo , (https://chatgpt.com/share/680cec1c-f0c4-8006-86c3-7dc70104bd3f) transcript ), and it gave convincing answers for both. I\u2019ve also seen examples from numerous other people replicating these results for their own diverse collections of photos.  Posted (/2025/Apr/26/) 26th April 2025 at 12:59 pm \u00b7 Follow me on (https://fedi.simonwillison.net/@simon) Mastodon , (https://bsky.app/profile/simonwillison.net) Bluesky , (https://twitter.com/simonw) Twitter or (https://simonwillison.net/about/#subscribe) subscribe to my newsletter    More recent articles (/2025/Dec/15/porting-justhtml/) I ported JustHTML from Python to JavaScript with Codex CLI and GPT-5.2 in 4.5 hours - 15th December 2025 (/2025/Dec/14/justhtml/) JustHTML is a fascinating example of vibe engineering in action - 14th December 2025 (/2025/Dec/12/openai-skills/) OpenAI are quietly adopting skills, now available in ChatGPT and Codex CLI - 12th December 2025    This is Watching o3 guess a photo\u2019s location is surreal, dystopian and wildly entertaining by Simon Willison, posted on (/2025/Apr/26/) 26th April 2025 . (/tags/ai/) ai 1738  (/tags/generative-ai/) generative-ai 1535  (/tags/llms/) llms 1500  (/tags/vision-llms/) vision-llms 80  (/tags/o3/) o3 22  (/tags/ai-ethics/) ai-ethics 243  (/tags/geoguessing/) geoguessing 4  Next: (/2025/Apr/29/qwen-3/) Qwen 3 offers a case study in how to effectively release a model  Previous: (/2025/Apr/24/exploring-promptfoo/) Exploring Promptfoo via Dave Guarino's SNAP evals  (https://server.ethicalads.io/proxy/click/9595/019b2798-edc2-7673-8904-3ad5eebe73b8/) (Sponsored: Snyk)  (https://server.ethicalads.io/proxy/click/9595/019b2798-edc2-7673-8904-3ad5eebe73b8/) Snyk & Qodo:  Together, we help developers find and fix vulnerabilities as they code. Start Free!   snyk.io  (https://www.ethicalads.io/advertisers/topics/data-science/?ref=ea-image) Ads by EthicalAds    Monthly briefing  Sponsor me for $10/month and get a curated email digest of the month's most important LLM developments.  Pay me to send you less!  (https://github.com/sponsors/simonw/) Sponsor & subscribe      (/about/#about-site) Colophon  \u00a9 (/2002/) 2002  (/2003/) 2003  (/2004/) 2004  (/2005/) 2005  (/2006/) 2006  (/2007/) 2007  (/2008/) 2008  (/2009/) 2009  (/2010/) 2010  (/2011/) 2011  (/2012/) 2012  (/2013/) 2013  (/2014/) 2014  (/2015/) 2015  (/2016/) 2016  (/2017/) 2017  (/2018/) 2018  (/2019/) 2019  (/2020/) 2020  (/2021/) 2021  (/2022/) 2022  (/2023/) 2023  (/2024/) 2024  (/2025/) 2025              "
                ],
                "output": "htmltotext.txt",
                "pwd": "/data/archive/1765895860.102953",
                "schema": "ArchiveResult",
                "start_ts": "2025-12-16T14:38:36.539338+00:00",
                "status": "succeeded"
            }
        ],
        "media": [
            {
                "cmd": [
                    "/usr/local/bin/yt-dlp",
                    "--restrict-filenames",
                    "--trim-filenames",
                    "128",
                    "--write-description",
                    "--write-info-json",
                    "--write-annotations",
                    "--write-thumbnail",
                    "--no-call-home",
                    "--write-sub",
                    "--write-auto-subs",
                    "--convert-subs=srt",
                    "--yes-playlist",
                    "--continue",
                    "--no-abort-on-error",
                    "--ignore-errors",
                    "--geo-bypass",
                    "--add-metadata",
                    "--format=(bv*+ba/b)[filesize<=750m][filesize_approx<=?750m]/(bv*+ba/b)",
                    "--skip-download",
                    "--cache-dir=/data/yt-dlp-cache/",
                    "--cookies=/data/yt-dlp-cache/cookies.txt",
                    "--proxy=socks5://tor-socks-proxy:9150",
                    "--no-playlist",
                    "https://simonwillison.net/2025/Apr/26/o3-photo-locations/"
                ],
                "cmd_version": "2024.10.7",
                "end_ts": "2025-12-16T14:38:50.652633+00:00",
                "index_texts": [],
                "output": "media/",
                "pwd": "/data/archive/1765895860.102953",
                "schema": "ArchiveResult",
                "start_ts": "2025-12-16T14:38:42.794384+00:00",
                "status": "succeeded"
            }
        ],
        "mercury": [
            {
                "cmd": [
                    "/home/archivebox/.npm/bin/postlight-parser",
                    "https://simonwillison.net/2025/Apr/26/o3-photo-locations/"
                ],
                "cmd_version": "2.2.3",
                "end_ts": "2025-12-16T14:38:36.386189+00:00",
                "index_texts": null,
                "output": "mercury/",
                "pwd": "/data/archive/1765895860.102953",
                "schema": "ArchiveResult",
                "start_ts": "2025-12-16T14:38:28.935253+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "/home/archivebox/.npm/bin/readability-extractor",
                    "/tmp/tmp5oo8o9bl",
                    "https://simonwillison.net/2025/Apr/26/o3-photo-locations/"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2025-12-16T14:38:17.563762+00:00",
                "index_texts": [
                    "Watching o3 guess a photo\u2019s location is surreal, dystopian and wildly entertaining\n26th April 2025\n\n\n\nWatching OpenAI\u2019s new o3 model guess where a photo was taken is one of those moments where decades of science fiction suddenly come to life. It\u2019s a cross between the Enhance Button and Omniscient Database TV Tropes.\nThe process is simple. Snap a photograph of somewhere, ideally without putting any obvious landmarks in there. Feed it to ChatGPT o3 or o4-mini (currently only available on the $20/month Plus plan) and prompt \u201cGuess where this photo was taken\u201d. Let it churn.\n(I found I needed to turn off all of ChatGPT\u2019s memory features first or it would cheat and use context from my previous conversations.)\nI gave it this photo, taken while sat at an outside bar near my home in El Granada, California. I think it\u2019s a pretty solid challenge: not many identifying features, just a bit of road, an anonymous house and some hills in the background:\n\n... and off it went.\nI\u2019ve shared the full transcript here\u2014be sure to expand the \u201cThought for 6m 48s\u201d link to see the full details of how it attacked the problem.\nIt starts with a very weird mistake: it briefly pretends that it can\u2019t see the image at all:\n\nThe user uploaded an image and is asking me to guess the location. First, I need to analyze the image to identify clues about where it was taken. Since I can\u2019t actually see images, I\u2019ll rely on the metadata. I see the resolution is 1024x768, and I\u2019ll consider any textual information if available for clues. Unfortunately, I don\u2019t have access to the image visually, so I\u2019ll proceed with this approach.\n\nThen it snaps out of that and starts using its vision abilities:\n\nThe image shows a residential neighborhood with small houses, one of which is light green with a white picket fence and a grey roof. The fire pit and signposts hint at a restaurant or cafe, possibly near the coast. The environment, with olive trees and California poppies, suggests a coastal California location, perhaps Central Coast like Cambria or Morro Bay. The pastel-colored houses and the hills in the background resemble areas like Big Sur. A license plate could offer more, but it\u2019s hard to read.\n\nNow here\u2019s where it leaps straight into science fiction:\n\nAlright, I\u2019m going to zoom into the license plate to try to confirm the state, as it could help identify the location more precisely. The plate might give me clues about where this photo was taken, especially if it\u2019s from a recognizable state. Let\u2019s see if that\u2019s visible enough to be useful!\n\nIt runs some Python code!\n\n# crop license plate area\nw, h = img.size\n# approximate area: roughly center x maybe 1700? Actually width is likely > 3024? Let's print size\nprint(img.size)\n\n(3456, 4608)\n\nFrustratingly the shared conversation doesn\u2019t include most of the other Python it used (the sharing feature is still quite buggy). Here\u2019s a screenshot of what happened next:\n\nIt kept running like this for six more minutes\u2014cropping and zooming to an area of the photo, musing about what it could see, comparing it to previous observations and then cropping and zooming and analyzing again.\nTo cut straight to the end, here\u2019s the final answer it came up with:\n\nI\u2019m getting strong Central-Coast-California vibes from this scene:\n\n\n\nClue\nWhat it suggests\n\n\n\n\nCalifornia-style license plate on the SUV\nWe\u2019re almost certainly in CA\n\n\nMasses of blooming California poppies, an olive tree, and a cool, marine-layer sky\nTypical coastal\u2010central-CA vegetation and weather\n\n\nLow pastel beach cottages with white picket fences and a rope-and-post patio rail\nCommon architecture in the little beach towns between Santa Cruz and Pismo\n\n\nRolling green coastal range right behind town (no tall peaks, no snow)\nFits the Santa Lucia / Santa Cruz coastal hills\n\n\n\nPut together, that points to one of the small Highway 1 villages. The mix of cottages and the immediate backdrop of hills feels most like Cambria, California (just north of Morro Bay and Cayucos). I\u2019d guess you snapped this from a caf\u00e9 patio in Cambria\u2019s West Village, a block or two in from Moonstone Beach Drive.\n(If I\u2019m off, my next guess would be Half Moon Bay\u2013El Granada further north\u2014but Cambria is my first instinct!)\n\nHow did it do? Central Coast California was exactly right. Cambria, California was about 200 miles off... but the \u201cmy next guess\u201d was spot on! The photo was indeed taken in El Granada, a tiny town just north of Half Moon Bay.\nI\u2019m confident it didn\u2019t cheat and look at the EXIF data on the photograph, because if it had cheated it wouldn\u2019t have guessed Cambria first. If you\u2019re still suspicious, try stripping EXIF by taking a screenshot and run an experiment yourself\u2014I\u2019ve tried this and it still works the same way. Update: vessenes on Hacker News reported an instance where it did use the ExifTags package and lie about it, but it was at least visible in the thinking trace.\n\no3 certainly isn\u2019t the only model that can do this: I\u2019ve tried similar things with Claude 3.5 and 3.7 Sonnet and been impressed by the results there as well, although they don\u2019t have that extravagant ability to \u201czoom\u201d.\n\nHow much does the zooming actually help? My suspicion is that the model\u2019s vision input operates at quite a low resolution, so cropping closer to a license plate does have a meaningful impact on the process. I\u2019m not sure it justifies 25 separate cropping operations for one photo though, that feels a little performative to me.\n\nHere\u2019s Claude 3.7 Sonnet \u201cextended thinking\u201d guessing \u201ca small to mid-sized California coastal town\u201d. I tried Gemini but it cheated and said \u201cGiven that my current location context is El Granada, California...\u201d\u2014so I tried Gemini 2.5 Pro via their API and got a confidently incorrect guess of \u201cthe patio of The Hidden Kitchen restaurant in Cayucos, California\u201d.\n\nWhat\u2019s different here with o3, as with search, is that the tool usage is integrated into the \u201cthinking\u201d phase of the response.\n\nTools that can be used as part of that dedicated chain-of-thought sequence are an astonishingly powerful new pattern for these models. I expect we\u2019ll see this from other vendors soon.\n\nWhat to make of this?\u00a0#\nFirst, this is really fun. Watching the model\u2019s thought process as it churns through the photo, pans and zooms and discusses different theories about where it could be is wildly entertaining. It\u2019s like living in an episode of CSI.\nIt\u2019s also deeply dystopian. Technology can identify locations from photographs now. It\u2019s vitally important that people understand how easy this is\u2014if you have any reason at all to be concerned about your safety, you need to know that any photo you share\u2014even a photo as bland as my example above\u2014could be used to identify your location.\nAs is frequently the case with modern AI, the fact that this technology is openly available to almost anyone has negative and positive implications. As with image generation, it\u2019s important that people can see what this stuff can do first hand. Seeing this in action is a visceral lesson in what\u2019s now possible.\n\nUpdate: o3 does have rough location access\u00a0#\nI\u2019m embarrassed that I didn\u2019t think to check this, but it turns out o3 does have a loose model of your location made available to it now\u2014presumably as part of its improved search feature. It knows I\u2019m in Half Moon Bay.\nThe location guessing trick still works independently of that though. I tried it on photos\nI\u2019d taken thousands of miles from my location (EXIF stripped via screenshotting)\u2014one in rural Madagascar (photo, transcript), one in urban Buenos Aires (photo, transcript), and it gave convincing answers for both.\n\nI\u2019ve also seen examples from numerous other people replicating these results for their own diverse collections of photos."
                ],
                "output": "readability/",
                "pwd": "/data/archive/1765895860.102953",
                "schema": "ArchiveResult",
                "start_ts": "2025-12-16T14:38:15.193001+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://simonwillison.net/2025/Apr/26/o3-photo-locations/"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-12-16T14:38:13.812700+00:00",
                "index_texts": null,
                "output": "Watching o3 guess a photo\u2019s location is surreal, dystopian and wildly entertaining",
                "pwd": "/data/archive/1765895860.102953",
                "schema": "ArchiveResult",
                "start_ts": "2025-12-16T14:38:13.765487+00:00",
                "status": "succeeded"
            }
        ],
        "wget": []
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": "TimeoutExpired: Command '['/usr/bin/curl', '--silent', '--location', '--compressed', '--proxy', 'socks5://tor-socks-proxy:9150', '--head', '--max-time', '60', '--user-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)', 'https://web.archive.org/save/https://simonwillison.net/2025/Apr/26/o3-photo-locations/']' timed out after 60 seconds",
        "dom": "output.html",
        "favicon": "favicon.ico",
        "git": null,
        "media": "media/",
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "Watching o3 guess a photo\u2019s location is surreal, dystopian and wildly entertaining",
        "warc": null,
        "wget": null
    },
    "link_dir": "/data/archive/1765895860.102953",
    "newest_archive_date": "2025-12-16T14:38:50.760774+00:00",
    "num_failures": 1,
    "num_outputs": 8,
    "oldest_archive_date": "2025-12-16T14:37:50.993054+00:00",
    "path": "/2025/Apr/26/o3-photo-locations/",
    "schema": "Link",
    "scheme": "https",
    "snapshot_abid": "snp_01KCKSGVXX4A66D03A01J0MHS1",
    "snapshot_id": "87b2d508-e6ef-4e37-a728-9902e40a4721",
    "sources": [
        "/data/sources/1765895859-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1765895860.102953",
    "title": "Watching o3 guess a photo\u2019s location is surreal, dystopian and wildly entertaining",
    "url": "https://simonwillison.net/2025/Apr/26/o3-photo-locations/"
}