DEV Community

Cover image for Bringing in the OutsideQuest
Ry
Ry

Posted on AI-assisted

Bringing in the OutsideQuest

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

GitHub logo 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
Enter fullscreen mode Exit fullscreen mode

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.2 gets 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()
Enter fullscreen mode Exit fullscreen mode

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_MODEL or VISION_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)

Collapse
 
suppdevbot profile image
DEV SUPPORTS •
You need to verify your account.
Enter fullscreen mode Exit fullscreen mode

tr.ee/dev-to