{"slug": "fieldcards-a-local-gemma-turns-your-photos-into-a-printed-scavenger-hunt", "title": "fieldcards: a local Gemma turns your photos into a printed scavenger hunt", "summary": "A developer built fieldcards, an open-source command-line tool that uses Gemma 3 running locally via Ollama to turn a folder of photos into a printed scavenger hunt. The tool analyzes each image, generates a riddle-style clue that avoids naming the subject, and renders it as an ASCII card on a print-ready sheet, with a --mode guide option producing a pocket field guide instead. A test run on a brewery photo took about 7 seconds, and the tool writes index.html, cards.txt and deck.json so clues can be edited and reprinted without re-running the model.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge: Week 1](https://dev.to/challenges/hacktoberfest-week1-2026-10-05) (theme: Touch Grass).*\n\n**fieldcards** is a command-line tool that turns the photos on your laptop into a printed scavenger hunt.\n\nYou point it at a folder of photos from a park, a garden or a trail. **Gemma 3**, running locally through **Ollama**, looks at each one, works out the most findable thing in it, and writes a clue that doesn't name it. Each clue is drawn as a printed ASCII card. You print the sheet, leave your phone at home, and go find the real things.\n\nThe screen is the shortest part: about two minutes to make the sheet, then the rest of the afternoon outside.\n\n```\n+-[ #05 other ]----------------+\n|                              |\n|    Find a dark, weathered    |\n|    giant resting beside a    |\n|   rushing, silver stream.    |\n|                              |\n+------------------------------+\n- Green moss covering its\n  surface\n- Dark, grey wood\n- A smooth, water-worn edge\nWhere: Typically found in damp,\n       shaded forest streams.\n[ ] found it   time: ______\n```\n\nThat card is real `gemma3:4b` output for a photo of a mossy log lying across a forest waterfall.\n\nIt's one command:\n\n```\nollama pull gemma3:4b\nnpm install -g github:KunalSiyag/fieldcards\nfieldcards ./photos --title \"Saturday in the park\"\n```\n\nHere's a real run in my terminal. `--stdout` prints the cards right there, and progress goes to stderr, so `fieldcards ./photos --stdout | lp` sends them straight to a printer:\n\nEvery run writes three files:\n\n`index.html`: a print-ready sheet, six cards per page, with the answer key on its own page.`cards.txt`: the same cards as plain text. `--cols 32` fits a 58 mm receipt printer.`deck.json`: everything Gemma said. Fix any mistakes, then reprint with `--from` without running the model again.\n`--mode guide` turns the same photos into a pocket field guide, with names and descriptions instead of riddles.\n\nThe run above used the only photo of my own I had on hand while writing this: the bar counter of a brewery I visited recently, taken from the floor above. It isn't an outdoor scene, but it shows the whole pipeline on a real, busy photo.\n\nGemma took 7 seconds and called it \"round, reflective surfaces\", with the clue *\"Find something that mirrors the light and reflects the surroundings around you.\"* That's fair for such a busy scene, but it isn't what I'd want on a card. It's exactly the case `deck.json` is for: change the subject to \"Oval bar counter\", run `fieldcards --from fieldcards-out/deck.json`, and the sheet reprints without calling the model again.\n\nTurn your outdoor photos into a printable scavenger hunt, with an open-weight model running on your own computer.\n\nEach photo goes to **Gemma 3**, running locally through **Ollama**. Gemma works out what the photo shows and writes a clue for finding it that doesn't name it. **[altsvg](https://www.npmjs.com/package/altsvg)** then replaces every photo with a printed ASCII card holding that clue, the way altsvg turns alt text into a placeholder. You print the sheet, leave your phone at home, and go find the real things.\n\n```\n+-[ #05 other ]----------------+\n|                              |\n|    Find a dark, weathered    |\n|    giant resting beside a    |\n|   rushing, silver stream.    |\n|                              |\n+------------------------------+\n- Green moss covering its\n  surface\n- Dark, grey wood\n- A smooth, water-worn edge\nWhere: Typically found in damp,\n       shaded forest streams.\n[ ] found it   time: ______\n```\n\nThat card came from a real `gemma3:4b` run on…\n\n`POST /api/chat` on the local Ollama server, together with a JSON schema in `format`. Gemma has to answer with `subject`, `category`, `description`, `clue`, `look_for`, `where` and `confidence`, so a chatty reply can't break the layout.`+--[ #01 other ]--+` frame, both as SVG for the printed page and as plain text for the terminal and Photos that were already described are matched by content hash and skipped on reruns, so you can add photos to the folder and run it again.\n\nThe prompt took three tries, and two of them taught me something:\n\nOn my test photos Gemma reliably recognised common things: a dandelion clock, a maple leaf, a waterfall. Its clues don't give the answer away. It was weaker on specifics: a crow came back as \"a sleek, dark bird\", a soft pine pollen cone was described as \"woody\", and the brewery became \"round, reflective surfaces\". Its self-rated confidence is only a rough signal; it rated all three of those \"high\". That's why every answer lands in `deck.json` for you to check before printing, and why every sheet says \"look, don't pick\".\n\n`localhost`.`--model` takes any vision model Ollama can run, and the JSON schema keeps the output the same shape.\nOn my laptop (RTX 3050, 4 GB), the first photo takes about two minutes because it also loads the model. Each photo after that takes 7 to 13 seconds, using about 2.9 GB of GPU memory.\n\nI haven't taken a printed hunt outside yet. That's the next step, and it's the test the whole design depends on. When I do, I want to find out:\n\nI'll add an update to this post with photos of the sheet in use.\n\n**Best Use of Gemma.** Gemma 3 4B is the core of the project. It reads every photo locally and writes the card content through a JSON schema.\n\n`--art` mode, which also prints the photo itself in characters.", "url": "https://wpnews.pro/news/fieldcards-a-local-gemma-turns-your-photos-into-a-printed-scavenger-hunt", "canonical_source": "https://dev.to/kunalsiyag/fieldcards-a-local-gemma-turns-your-photos-into-a-printed-scavenger-hunt-121", "published_at": "2026-10-11 06:44:36+00:00", "updated_at": "2026-10-11 06:51:41.670162+00:00", "lang": "en", "topics": ["ai-tools", "generative-ai", "large-language-models", "developer-tools"], "entities": ["Gemma 3", "Ollama", "fieldcards", "altsvg", "KunalSiyag", "Hacktoberfest"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/fieldcards-a-local-gemma-turns-your-photos-into-a-printed-scavenger-hunt", "markdown": "https://wpnews.pro/news/fieldcards-a-local-gemma-turns-your-photos-into-a-printed-scavenger-hunt.md", "text": "https://wpnews.pro/news/fieldcards-a-local-gemma-turns-your-photos-into-a-printed-scavenger-hunt.txt", "jsonld": "https://wpnews.pro/news/fieldcards-a-local-gemma-turns-your-photos-into-a-printed-scavenger-hunt.jsonld"}}