<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ashutosh Gautam</title>
    <description>The latest articles on DEV Community by Ashutosh Gautam (@dr_owl).</description>
    <link>https://dev.to/dr_owl</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F810457%2Ffb99ff72-4397-4766-aa68-e2a79ed629bc.jpeg</url>
      <title>DEV Community: Ashutosh Gautam</title>
      <link>https://dev.to/dr_owl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dr_owl"/>
    <language>en</language>
    <item>
      <title>Lantern: one walk with a phone becomes an offline indoor map, built by Gemma 4</title>
      <dc:creator>Ashutosh Gautam</dc:creator>
      <pubDate>Sun, 11 Oct 2026 11:51:08 +0000</pubDate>
      <link>https://dev.to/dr_owl/lantern-one-walk-with-a-phone-becomes-an-offline-indoor-map-built-by-gemma-4-3567</link>
      <guid>https://dev.to/dr_owl/lantern-one-walk-with-a-phone-becomes-an-offline-indoor-map-built-by-gemma-4-3567</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp3j5qjqf4yrwvw830fjh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp3j5qjqf4yrwvw830fjh.jpg" alt="Lantern Poster" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;My friends can't find the washroom in a crowded stadium where internet and cell networks get blocked. Nobody can find anything at the Kumbh Mela. Entire buildings have no map beyond the gate.&lt;/p&gt;

&lt;p&gt;Indoor navigation exists, but it needs architect floor plans, Bluetooth beacons or weeks of professional setup, so most buildings in India will never get it. And in a crowd, mobile data dies, so even the map you do have stops working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lantern&lt;/strong&gt; turns one walk into a map that works offline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Someone walks through the building once&lt;/strong&gt;, filming on their phone and saying what they see: &lt;em&gt;"This is the reception area"&lt;/em&gt;, &lt;em&gt;"Now here are the male and female washrooms"&lt;/em&gt;, &lt;em&gt;"If we go past the seminar area we'll find the exit."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4, running on a laptop, turns that video into a map&lt;/strong&gt;: every place, a photo of it, its floor, and walking directions in both directions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A person checks and fixes it&lt;/strong&gt; on a simple review page, then prints QR &lt;strong&gt;"📍 You are here"&lt;/strong&gt; signs for the walls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visitors scan a sign and walk.&lt;/strong&gt; One instruction at a time, each with a photo of the next landmark: &lt;strong&gt;&lt;em&gt;"Walk until you see this."&lt;/em&gt;&lt;/strong&gt; After the first visit it works in &lt;strong&gt;airplane mode&lt;/strong&gt;, with no app install and no GPS.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why this is "touch grass":&lt;/strong&gt; Lantern doesn't want you looking at a blue dot. Every step shows a &lt;em&gt;photo of the real door ahead&lt;/em&gt;, so you look up, find it, and walk. It's for people who feel lost and anxious in big unfamiliar buildings: elderly visitors, first-time smartphone users, people who don't read English well, wheelchair users who need to know where the stairs are. The design rule I held myself to: &lt;em&gt;if my grandmother can't use it, it isn't done.&lt;/em&gt; That means 22px text, 64px buttons, AAA contrast, an icon &lt;strong&gt;and&lt;/strong&gt; a word on every button, no swipes, no timers, and 🔊 read-aloud with on-device voices.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pick where to go&lt;/th&gt;
&lt;th&gt;One step at a time&lt;/th&gt;
&lt;th&gt;Arrived&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsdho4g3w1ye3b7895mw3.jpg" alt="Where do you want to go" width="508" height="1200"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvydbngf9s1kfbyr9ngci.jpg" alt="Step 3 of 6: take the lift" width="508" height="1200"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fipmhgpk10ufzlyykg7so.jpg" alt="You have arrived" width="554" height="1200"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🌐 &lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://lantern-53909.web.app" rel="noopener noreferrer"&gt;https://lantern-53909.web.app&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open it once and wait for &lt;strong&gt;"Ready to use without internet"&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Turn on &lt;strong&gt;airplane mode&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Tap &lt;strong&gt;Find my way → Choose from photos → Main Entrance → Washroom&lt;/strong&gt;, then follow &lt;strong&gt;Next&lt;/strong&gt; until &lt;em&gt;"You have arrived"&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's my real college, mapped from two iPhone clips (3 min 17 s in total).&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ashutoshgautams" rel="noopener noreferrer"&gt;
        ashutoshgautams
      &lt;/a&gt; / &lt;a href="https://github.com/ashutoshgautams/lantern" rel="noopener noreferrer"&gt;
        lantern
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      offline navigation
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🏮 Lantern — One walk. Offline map.&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Walk through a building once with your phone camera, saying place names out loud. AI turns that video
into step-by-step photo directions that work with no internet, no GPS and no app install.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Stadiums, railway stations, government hospitals, college campuses and the Kumbh Mela have no indoor maps
Existing indoor-navigation products need floor plans, beacons or weeks of professional setup, so most places
in India and Asia will never get one. And in a crowd, mobile data dies.&lt;/p&gt;
&lt;p&gt;Lantern makes a venue navigable in an afternoon, for visitors who are elderly, new to smartphones, or don't
read English well. &lt;em&gt;If my grandmother can't use it, it's not done.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;▶ Live app:&lt;/strong&gt; &lt;a href="https://lantern-53909.web.app" rel="nofollow noopener noreferrer"&gt;https://lantern-53909.web.app&lt;/a&gt; · works in airplane mode after the first visit&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Home&lt;/th&gt;
&lt;th&gt;Where to?&lt;/th&gt;
&lt;th&gt;One step at a time&lt;/th&gt;
&lt;th&gt;Arrived&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/ashutoshgautams/lantern/docs/screenshots/light-home.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fashutoshgautams%2Flantern%2FHEAD%2Fdocs%2Fscreenshots%2Flight-home.jpg" alt="Home"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/ashutoshgautams/lantern/docs/screenshots/light-whereto.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fashutoshgautams%2Flantern%2FHEAD%2Fdocs%2Fscreenshots%2Flight-whereto.jpg" alt="Where to"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/ashutoshgautams/lantern/docs/screenshots/light-step.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fashutoshgautams%2Flantern%2FHEAD%2Fdocs%2Fscreenshots%2Flight-step.jpg" alt="Step"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/ashutoshgautams/lantern/docs/screenshots/light-arrived.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fashutoshgautams%2Flantern%2FHEAD%2Fdocs%2Fscreenshots%2Flight-arrived.jpg" alt="Arrived"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;

  &lt;div class="js-render-enrichment-target"&gt;
    &lt;div class="render-plaintext-hidden"&gt;
      &lt;pre&gt;flowchart LR
  V[🎥 One walkthrough video&amp;lt;br/&amp;gt;with spoken narration] --&amp;gt; M{Mapper}&lt;/pre&gt;…&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ashutoshgautams/lantern" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ashutoshgautams/lantern/blob/main/mapper/gemma.py" rel="noopener noreferrer"&gt;&lt;code&gt;mapper/gemma.py&lt;/code&gt;&lt;/a&gt;: the Gemma 4 pipeline (about 120 lines, standard library only)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ashutoshgautams/lantern/blob/main/docs/examples/gemma4-college-quad.map.json" rel="noopener noreferrer"&gt;&lt;code&gt;docs/examples/gemma4-college-quad.map.json&lt;/code&gt;&lt;/a&gt;: Gemma's raw, unedited output for my college&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ashutoshgautams/lantern/tree/main/app" rel="noopener noreferrer"&gt;&lt;code&gt;app/&lt;/code&gt;&lt;/a&gt;: the offline visitor app (plain HTML/CSS/JS + service worker, no framework)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Gemma 4 is the part that understands the building
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;walk.mov ─ffmpeg──► a frame every 3 s, labelled "IMG_9230.MOV at 45 s" ─┐
         └whisper.cpp─► narration with timestamps: "[43s] here are the   ├─► Gemma 4 12B ─► map.json
                        male and female washrooms"                       ┘   (Ollama, local)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Turning a shaky, unscripted phone walk into a &lt;em&gt;navigable graph&lt;/em&gt; is a genuinely multimodal reasoning problem, and it's what &lt;strong&gt;Gemma 4 12B&lt;/strong&gt; does in Lantern, locally through Ollama:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It sees.&lt;/strong&gt; About 60 frames, each labelled with its video and second, go in as images. Gemma picks the frame that best shows each place (the door, the sign, the counter), and that frame becomes the photo visitors follow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It listens.&lt;/strong&gt; whisper.cpp transcribes the narration with timestamps, so Gemma can line up &lt;em&gt;"this is the Tesla room"&lt;/em&gt; at 30 s with the glass door visible in the frame at 30 s.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It reasons about space.&lt;/strong&gt; For every path it writes a forward hint &lt;em&gt;and&lt;/em&gt; the reverse hint (a left going in is a right coming back), counts approximate steps, flags stairs, tracks floors across a lift ride, and merges places the walker comes back to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It returns strict JSON&lt;/strong&gt; that a 20-line Dijkstra in the browser can route over. The model is never asked to make something up in front of a lost visitor at runtime.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is every place Gemma found in my college, with the photo it picked for each:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkr4tundw8y6dc0ddv02.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkr4tundw8y6dc0ddv02.jpg" alt="Places Gemma 4 found in one walk" width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;19 places and 18 paths, in under two minutes, on a MacBook (M4 Pro, 24 GB), without the internet.&lt;/strong&gt; My favourite detail: I only &lt;em&gt;said&lt;/em&gt; "C1 and C2 are on the fourth floor, and in the middle of them there are washrooms" while standing on a stair landing. Gemma still created C1, C2 and a 4th-floor washroom on floor 4, linked through the stairs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Honest results: AI proposes, a human confirms
&lt;/h3&gt;

&lt;p&gt;Look closely at the grid and you'll see the limits. &lt;em&gt;Main Entrance&lt;/em&gt; and &lt;em&gt;Garage&lt;/em&gt; got the same frame, and C1, C2 and the 4th-floor washrooms share one photo of the landing, because I named them without walking into them. A couple of hints were vague ("Move to the adjacent room, C2"), and one sends you "down" a staircase on the ground floor ("Walk down and then towards the lift").&lt;/p&gt;

&lt;p&gt;That's why Lantern has a rule: &lt;strong&gt;AI proposes, a human confirms, and the visitor app uses no AI at all.&lt;/strong&gt; The review page shows every place as a photo card and every path as an editable row (forward hint, backward hint, stairs). Duplicates merge with one dropdown. Visitors then get directions that are deterministic, instant and offline.&lt;/p&gt;

&lt;p&gt;I also ran the same videos through Gemini on Google Cloud, which the project keeps as a fallback:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Gemma 4 12B (local)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;Gemini Flash (cloud)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Where it runs&lt;/td&gt;
&lt;td&gt;My laptop, offline&lt;/td&gt;
&lt;td&gt;Google Cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;66 frames + whisper.cpp transcript&lt;/td&gt;
&lt;td&gt;Full video + audio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Places found&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;19&lt;/strong&gt;, including everything I only &lt;em&gt;said&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hints&lt;/td&gt;
&lt;td&gt;Simpler; a few needed fixing&lt;/td&gt;
&lt;td&gt;More visual landmarks ("past the yellow pillar")&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Building video leaves the venue?&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (deleted after mapping)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost per venue&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;₹0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Per-token pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Gemma was better at &lt;em&gt;coverage&lt;/em&gt;, and Gemini at &lt;em&gt;landmark-rich wording&lt;/em&gt;. For a privacy-sensitive hospital or school, the local model wins outright.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Gemma 4 working locally: three things I learned
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ollama's schema-enforced JSON wasn't available for &lt;code&gt;gemma4:12b&lt;/code&gt;&lt;/strong&gt; in my version (&lt;code&gt;501: structured output is unavailable&lt;/code&gt;). So the JSON Schema goes into the prompt, the mapper takes the outermost &lt;code&gt;{…}&lt;/code&gt; from the reply, retries once with a correction message, and then validates every field (unique ids, real video names, no dangling or duplicate paths).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My first run never finished: the model looped.&lt;/strong&gt; Setting &lt;code&gt;think: false&lt;/code&gt;, capping &lt;code&gt;num_predict&lt;/code&gt; at about 3× the expected map size, and a mild &lt;code&gt;repeat_penalty: 1.1&lt;/code&gt; brought it to a clean answer in under two minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 E2B/E4B can hear audio natively&lt;/strong&gt;, but Ollama's API doesn't expose audio input yet, so whisper.cpp does the listening for now. Dropping whisper for native Gemma audio is the next step.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;For Lantern, open weights aren't a nice-to-have. They decide whether it can be used at all where it's needed most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy of real buildings.&lt;/strong&gt; Hospitals, schools and government offices often can't upload interior footage to a third-party API. With Gemma on a laptop, the venue's video never leaves the room.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works where the cloud doesn't.&lt;/strong&gt; Lantern exists for places with bad connectivity. A volunteer can map a railway station on a laptop &lt;em&gt;at the station&lt;/em&gt;, with no uplink, no API key and no per-video bill. That's the difference between one demo and every station in a district.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone can own it.&lt;/strong&gt; Model, transcription, mapper and app are all open. A college club can fork the repo, map its campus over a weekend and host it free. The map is plain JSON anyone can read and fix.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma.&lt;/strong&gt; Gemma 4 12B is the open-weight model at the core of Lantern's mapping pipeline. It runs fully locally through Ollama, it's multimodal (it picks photos from frames and reads narration), and it outputs a strict graph that powers offline navigation. The real output is committed to the repo as evidence.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
