This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
OutsideQuest is a one-button, 70s-arcade-style desktop game that pushes you away from the screen and into the real world.
Press NEW MISSION, and it checks the live weather outside; then a local LLM writes a short, safe photo mission to suit the conditions, like "Find three different shades of green" on a clear day or "Capture a puddle reflection" when it's raining. You go outside, complete it, and press SNAP PHOTO. A local vision model looks at your webcam shot and replies with PASS or FAIL plus a witty reaction to what it actually sees and the weather around you.
Win, and your daily streak climbs. Miss a day, and it resets, which turns "I should go for a walk" into "I can't break the streak."
It's for anyone who spends too much time at a desk: students, developers, remote workers, or anyone who needs a small, playful reason to step outside.
Demo
Code
maryam-rahat
/
OutsideQuest
a one-button outdoor game built with Python, tkinter and Ollama. checks your live local weather, has a local LLM generate a safe photo mission that suits the conditions, then uses a vision model to judge the photo from your webcam. PASS or FAIL with a witty reaction to what it sees, and a daily streak counter tracks your consecutive-day wins.
OutsideQuest
A 70s-arcade-style desktop game that sends you outside on photo missions and has a local AI judge your snap.
Press one button, get a weather-aware mission, go complete it, snap a photo, and watch a vision model react to the real world. Build a daily streak.
Features
- Missions generated by a local LLM, tuned to your live weather
- Webcam photo judged by a local vision model with a PASS or FAIL and a witty reaction
- Persistent daily streak and best score
- Retro CRT UI: amber and phosphor-green text, Atari-style stripes, typewriter output, blinking
INSERT COIN - Resizable window with scaling fonts, fullscreen on
F11
Stack
Python, tkinter, OpenCV, Ollama, Open-Meteo
Requirements
- Python 3.9+
- Ollama running locally
- A webcam
- Internet access for the weather lookup only
Setup
pip install ollama opencv-python
ollama pull llama3.2
ollama pull llava
python mission.py
Controls
| Input | Action |
|---|---|
| NEW MISSION | Fetch weather, generate an objective |
| SNAP PHOTO |
Run it yourself:
pip install ollama opencv-python
ollama pull llama3.2
ollama pull llava
python mission.py
How I Built It
The whole game runs on open-weight models through local inference with Ollama, so there are no API keys and no cloud calls for the AI.
-
Mission generation:
llama3.2gets a random theme (colors, shapes, textures, sky, tiny details) plus the current weather and returns a one-sentence mission. -
Photo judging:
llava, an open multimodal model, receives the webcam frame, the mission and the weather, and answers with PASS or FAIL and a one-line reaction. - Live weather: approximate location from the IP, then current conditions from Open-Meteo, which needs no key.
- Streak: a small JSON file tracks consecutive-day wins and a best score.
- Interface: tkinter with a 70s CRT look: amber and phosphor-green text, Atari-style stripes, typewriter output, and a blinking INSERT COIN. It's resizable, fonts scale with the window, and F11 goes fullscreen.
- Responsiveness: model calls run in worker threads so the UI never freezes while the models think.
The core of the judging step:
def judge(mission, w):
path = capture()
ctx = f"Weather right now: {weather_text(w)}." if w else ""
r = ollama.chat(
model=VISION_MODEL,
messages=[{
"role": "user",
"content": f"Mission: {mission}\n{ctx}\nDoes this photo complete the mission? Start with PASS or FAIL, then one witty sentence reacting to what you see and the weather.",
"images": [path],
}],
)
return r["message"]["content"].strip()
Why Does Open Innovation Matter?
This project sends a camera frame of your surroundings to an AI every time you play. With a closed API, that photo would go to someone else's servers on every mission. With open-weight models running locally, the photo never leaves your machine. The only network calls are the weather lookup.
Open models also made it practical to build:
- No keys, no bills, no rate limits. Anyone can clone the repo, pull two models, and play, with no signup and no per-call cost.
-
Swappable parts. Changing the mission writer or the judge is a one-line edit to
TEXT_MODELorVISION_MODEL, so users can pick a smaller model for a laptop or a stronger one for a GPU. - Works as a daily habit. A streak game has to be free and always available, and local inference means it doesn't depend on a provider's pricing or uptime.
Open innovation made it possible to build something that looks at your real world without handing your world to anyone.


Top comments (1)
tr.ee/dev-to