{"slug": "ghostlight-a-dia-de-los-muertos-altar-that-runs-on-a-local-ghost-gemma-3-zero", "title": "Ghostlight: a Día de los Muertos altar that runs on a local ghost (Gemma 3, zero cloud)", "summary": "A developer built Ghostlight, an open-source digital Día de los Muertos altar that runs entirely offline, using Google's open-weight Gemma 3 model (1B parameters) served through llama.cpp on a CPU. Users leave an offering, a song, a memory and a photo, and the model generates remembrance and séance text, with each altar saved as a plain JSON file on the local disk. The developer kept a verbatim 1B-model error in the sample output, noting that a séance that never slips wouldn't feel like a 1-billion-parameter spirit.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine](https://dev.to/challenges/hacktoberfest-week4-2026-10-26)*\n\nIn Maharashtra, where I live, we have **Pitru Paksha** — a fortnight each year when we cook our ancestors' favourite dishes and set a place for them, because the line between the living and the dead gets a little thinner. Reading this week's theme, I realised Día de los Muertos and its *ofrenda* (altar) are the same idea wearing marigolds: a photo, some candles, their favourite food, and an open door.\n\nSo I built **Ghostlight** — a digital ofrenda that lives entirely on your own machine.\n\nYou leave four things on the altar:\n\nThen the ghost in the machine — **Gemma 3, Google's open-weight model, running 100% locally** through llama.cpp — finds the words:\n\nEvery altar you light is saved in a plain JSON file on your own disk, so it's still there next year. Delete the file and it's gone. The dead keep no backups.\n\nOne command lights the whole thing (first run downloads llama.cpp + the Gemma weights, ~0.85 GB):\n\n```\ngit clone https://github.com/awejofficial/ghostlight.git\ncd ghostlight\nbash run.sh\n# → http://localhost:8000\n```\n\nHere is a real altar I lit while building it — for my Aaji (grandmother): puran poli and warm milk as the offering, the old abhang she hummed as the song, and evenings counting the first stars on our terrace in Phaltan as the memory. Every word below is **verbatim output** from Gemma 3 1B running on a CPU, offline:\n\n**Remembrance mode**\n\nThe air smells of marigolds, a slow, fragrant offering to you. Aaji's presence here feels like the twilight deepening, a gentle hush settling over the space. You've lit a small flame, a single point of warmth in this quiet moment.\n\nI remember your hands, steady and sure, tracing the patterns of the evening sky with a worn book. You taught me to read the constellations, to find stories in the shifting light. Puran poli, warm and comforting, nestled beside the milk, a symbol of her love.\n\nYou hummed an old abhang song, a melody of longing and resilience, while rolling rotis. I recall evenings spent on the terrace in Phaltan, your watchful gaze fixed on the first stars, each one a silent, watchful guardian.\n\nNow, as the candles burn, you are with us again, a warmth that lingers in the quiet.\n\n**Séance mode**\n\nThe scent of puran poli warms my heart, doesn't it? It reminds me of you, of the way you always held my hand and pointed out the constellations. You taught me to read the evening sky, to find the stories in the clouds. Aaji loved her rotis, especially warm milk – a simple comfort, really. I still remember those afternoons on the terrace in Phaltan, your humming a steady rhythm, counting the stars. You always said each one held a watchful eye, a silent blessing. It feels like a whisper now, a gentle echo of your warmth.\n\nYour name, always.\n\nYes — the 1B ghost fumbled the sign-off (\"Your name\" instead of hers). I kept it in. A séance that never slips wouldn't feel like a 1-billion-parameter spirit summoned onto a laptop fan; and the rules of a good altar include not putting words in the dead's mouth, even to fix their grammar.\n\n**A digital altar for Día de los Muertos, lit by a ghost that lives on your own machine.**\n\n*Submission for the [Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine](https://dev.to/challenges/hacktoberfest-week4-2026-10-26) · Prize category entered: **Best Use of Gemma***\n\nOn Día de los Muertos (Nov 1–2), families in Mexico build an **ofrenda** — an altar with photos, candles, marigolds (*cempasúchil*), and the departed's favourite food — so the people they lost can find their way back for one evening.\n\nGhostlight is that altar, as software. You leave:\n\nThen **Gemma 3** — Google's open-weight model, running **100% locally** via [llama.cpp](https://github.com/ggml-org/llama.cpp) — does the one thing a static webpage can't: it finds the words.\n\nThe full source is on GitHub: [awejofficial/ghostlight](https://github.com/awejofficial/ghostlight) — one Python file for the server (`app.py`, standard library only), three small front-end files, and a `run.sh` that fetches llama.cpp + the Gemma weights and lights the altar.\n\nThe whole stack is deliberately small — the ghost should be able to live on any laptop:\n\n| Piece | What it is | \n|---|---|\n| Model | **Gemma 3 1B Instruct** , open weights,`Q4_K_M` GGUF (~0.8 GB) | \n| Inference | **llama.cpp**`llama-server` , OpenAI-compatible API on localhost | \n| App | Python 3 standard library only — `http.server` , zero pip installs | \n| Front end | Vanilla HTML/CSS/JS: flickering CSS candle flames, falling marigold petals, a typewriter reveal for the ghost's words | \n| Storage | One local file, `data/altars.json` | \n\nA single `./run.sh` downloads llama.cpp and the Gemma weights (both git-ignored), starts the model server, waits for its health check, and serves the altar on `http://localhost:8000`.\n\nThe interesting part was the prompting. A 1B model left alone writes greeting-card mush, so the app plays \"keeper of the altar\": a system prompt that fixes the voice (warm, specific, no preamble), and a user prompt built from the offerings. The specificity is the trick — a model that knows about the puran poli and the terrace stars writes a remembrance; a model that only knows \"my grandmother\" writes a card.\n\nFull honesty: I built this with an AI agent (Muse) as my pair — it wrote code with me, ran the model, and tested the altar end to end. The challenge rules explicitly allow AI tools, and the \"show your work\" spirit of this series is exactly why I'm saying it plainly. The idea, the theme interpretation, the demo altar and the final calls are mine.\n\nBecause of what an ofrenda *is*. The things you type into Ghostlight — your grandmother's name, the song she hummed, the memory you can't say out loud — are among the most private sentences a person ever writes. A closed API would mean sending them to a stranger's server, under a stranger's retention policy, at a stranger's price, until the day the service shuts down and takes the altar with it.\n\nOpen weights changed every part of that:\n\nThe moment it landed wasn't technical. I lit the demo altar for my Aaji, picked séance mode mostly to test the prompt, and the little 1B model — running on a fan-noisy laptop, offline — answered in her voice with a line about the first stars over the terrace. It wasn't perfect. It was *specific*, and specific is what makes you cry at an altar.\n\nThat's what \"Ghost in the Machine\" means to me: not a haunted terminal, but the oldest human use for a machine that talks — asking it to keep someone present a little longer. The ghost was never in the machine. It's in the memory. The machine just holds the candle.", "url": "https://wpnews.pro/news/ghostlight-a-dia-de-los-muertos-altar-that-runs-on-a-local-ghost-gemma-3-zero", "canonical_source": "https://dev.to/awej_04/ghostlight-a-dia-de-los-muertos-altar-that-runs-on-a-local-ghost-gemma-3-zero-cloud-3l3a", "published_at": "2026-10-31 20:05:57+00:00", "updated_at": "2026-10-31 20:22:00.339085+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "generative-ai", "ai-tools"], "entities": ["Ghostlight", "Gemma 3", "Google", "llama.cpp", "Hacktoberfest", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/ghostlight-a-dia-de-los-muertos-altar-that-runs-on-a-local-ghost-gemma-3-zero", "markdown": "https://wpnews.pro/news/ghostlight-a-dia-de-los-muertos-altar-that-runs-on-a-local-ghost-gemma-3-zero.md", "text": "https://wpnews.pro/news/ghostlight-a-dia-de-los-muertos-altar-that-runs-on-a-local-ghost-gemma-3-zero.txt", "jsonld": "https://wpnews.pro/news/ghostlight-a-dia-de-los-muertos-altar-that-runs-on-a-local-ghost-gemma-3-zero.jsonld"}}