Upload a photograph. It grows a personality, a grudge, and a mouth — then it argues with you out loud, in Malayalam, because you woke it up for no good reason.
a portrait gallery that finally talks back
Photographs have sat in galleries for decades in total silence, holding the same pose, saying nothing. Nobody has ever asked how the appam feels about being photographed instead of eaten. Nobody has checked whether the Mona Lisa is tired. Nobody has considered that your plastic chair has four legs and still cannot walk out of the frame.
Worse: nobody has ever been roasted in fluent Malayalam by their own furniture. A gap in the human experience, frankly overdue.
We gave the photograph a mouth, a grievance, and strong opinions about your photography. Hold space, talk, and it answers — in character, under twenty words, with theatrical comic timing.
"ഓഹോ... എന്നെ വരച്ചത് ലിയോനാർദോ ദാ വിഞ്ചി, ഇനി ചോദ്യം തീർന്നോ പ്രിയമേ!" "Yes, da Vinci painted me. Are we done here?"
"നാല് കാലുകളുണ്ടായിട്ടും ഈ ചിത്രത്തിൽനിന്ന് ഒരടി പോലും നടക്കാനാകുന്നില്ല" "Four legs, and still can't walk one step out of this picture."
"എന്റമ്മോ... പുറത്തുപോകാൻ permission ഇല്ല, എന്റെ freedom ഫോട്ടോ സൈസ്!" "My freedom is exactly one photo-sized rectangle."
No agent framework, no RAG, no 3D engine, no vector database. Twenty-one throwaway spike scripts and a great deal of stubbornness.
| Role | Service | Model / Voice |
|---|---|---|
| Speech + conversation | Azure AI Foundry Voice Live | gpt-realtime-2.1 |
| Malayalam synthesis | Sarvam AI | bulbul:v3 — tarun / roopa |
| Image understanding | Azure AI Foundry | gpt-5.6-sol |
| Fallback synthesis | Azure Speech TTS | ml-IN-MidhunNeural / SobhanaNeural |
I solemnly swear the key never leaves the server.
Three memories worth extracting. The full run lives in the demo video and one minute of npm run dev.
The landing screen resumes a session: "നിന്റെ ചിത്രം ഓർത്തുവെച്ചു" — it remembered your picture, so you're not back at square one after a reload.
The character on stage, named മോനാലിസ. The eyes and mouth are SVG overlays that track your cursor and blink on their own — no video generated per reply.
Mid-conversation, reconnected: it addresses you by name and carries on the exchange instead of reintroducing itself. Push-to-talk, an escape lunge, and a type-a-question fallback sit below.
The roasting has a boundary, and the character cannot be talked out of it.
Talking to a photograph instead of doing something useful. Your questions. Your lighting. Your impatience.
Body, appearance, caste, religion, region, family, gender, age, disability, money. Private individuals are never named or given an invented life story.
Read before assuming this is just a lazy static deploy.
So: this page explains it, the demo video shows it talking, and npm run dev has the real thing running locally in about a minute.
College of Engineering Chengannur