<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Projects on yenupam</title><link>https://yenupam.com/projects/</link><description>Recent content in Projects on yenupam</description><generator>Hugo</generator><language>en-us</language><copyright>© Anupam Roy</copyright><lastBuildDate>Tue, 16 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://yenupam.com/projects/index.xml" rel="self" type="application/rss+xml"/><item><title>Drut (WIP)</title><link>https://yenupam.com/projects/drut/</link><pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate><guid>https://yenupam.com/projects/drut/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Status: Work in Progress.&lt;/strong&gt; This is an active design exploration. Specifications and targets are subject to change.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="system-architecture"&gt;System Architecture&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Interactive diagram: &lt;a href="https://excalidraw.com/#json=CwPjzUReQDcjjYbpOnAPn,E95GNaDS59Nuvv91phPKxA"&gt;open in Excalidraw&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




 
 
 
 
 
 
 
 

 





 
 
 
 
 
 
 
 
 






&lt;div class="hugo-gallery hg-single" id="gallery-527834619"
 data-images="[&amp;#34;/projects/drut/arch_hu_e426c537b369c689.png&amp;#34;]"
 data-titles="[&amp;#34;System Arch.&amp;#34;]"
 data-index="0"&gt;
 &lt;figure class="hg-figure"&gt;
 &lt;div class="hg-main-view"&gt;
 &lt;img src="https://yenupam.com/projects/drut/arch_hu_e426c537b369c689.png" alt="System Arch." class="hg-current-image" loading="lazy"&gt;
 &lt;/div&gt;
 &lt;figcaption class="hg-caption hg-current-caption"&gt;System Arch.&lt;/figcaption&gt;
 &lt;/figure&gt;

 

 &lt;div class="hg-lightbox"&gt;
 &lt;button class="hg-lightbox-close" aria-label="Close Lightbox"&gt;&amp;times;&lt;/button&gt;
 
 &lt;figure class="hg-lightbox-figure"&gt;
 &lt;img class="hg-lightbox-content" src="" alt="Zoomed Gallery Image"&gt;
 &lt;figcaption class="hg-lightbox-caption"&gt;&lt;/figcaption&gt;
 &lt;/figure&gt;
 
 &lt;/div&gt;
&lt;/div&gt;


 
 &lt;style&gt;
 .hugo-gallery {
 margin: 2.5rem 0;
 width: 100%;
 }

 .hg-figure {
 margin: 0;
 padding: 0;
 }

 .hg-main-view {
 width: 100%;
 aspect-ratio: 16 / 9;
 background: #eaebed;
 cursor: zoom-in;
 overflow: hidden;
 display: flex;
 align-items: center;
 justify-content: center;
 border: 1.5px solid rgba(0, 0, 0, 0.12);
 transition: border-color 0.15s ease;
 }

 .hg-main-view:hover {
 border-color: var(--primary);
 }

 .hg-current-image {
 max-width: 100%;
 max-height: 100%;
 object-fit: contain;
 }

 .hg-caption {
 margin-top: 0.6rem;
 font-family: 'Red Hat Mono', monospace;
 font-size: 13px;
 color: var(--font-color, #222);
 opacity: 0.75;
 text-align: center;
 min-height: 1.2em;
 }

 .hg-caption:empty {
 display: none;
 }

 
 .hg-single .hg-main-view {
 aspect-ratio: auto;
 max-height: 400px;
 display: inline-block;
 width: auto;
 max-width: 100%;
 padding: 0;
 line-height: 0;
 }

 .hg-single .hg-figure {
 display: inline-block;
 max-width: 100%;
 }

 .hg-single .hg-current-image {
 max-height: 400px;
 display: block;
 }

 .hg-controls {
 display: flex;
 justify-content: space-between;
 align-items: center;
 margin-top: 1rem;
 font-family: 'Red Hat Mono', monospace;
 font-size: 13px;
 color: var(--font-color, #222);
 }

 .hg-btn {
 background: none;
 border: none;
 padding: 4px 8px;
 cursor: pointer;
 font-family: inherit;
 color: inherit;
 opacity: 0.7;
 transition: color 0.15s, opacity 0.15s;
 }

 .hg-btn:hover {
 color: #e55b64;
 opacity: 1;
 }

 .hg-counter {
 opacity: 0.5;
 font-size: 12px;
 }

 .hg-lightbox {
 display: none;
 position: fixed;
 inset: 0;
 z-index: 99999;
 background: rgba(12, 14, 16, 0.95);
 align-items: center;
 justify-content: center;
 flex-direction: column;
 backdrop-filter: blur(4px);
 opacity: 0;
 transition: opacity 0.2s ease;
 }

 .hg-lightbox.show {
 display: flex;
 opacity: 1;
 }

 .hg-lightbox-figure {
 margin: 0;
 padding: 0;
 display: flex;
 flex-direction: column;
 align-items: center;
 max-width: 90vw;
 max-height: 90vh;
 }

 .hg-lightbox-content {
 max-width: 90vw;
 max-height: 85vh;
 object-fit: contain;
 box-shadow: 0 10px 40px rgba(0,0,0,0.5);
 }

 .hg-lightbox-caption {
 margin-top: 0.8rem;
 color: rgba(255, 255, 255, 0.85);
 font-family: 'Red Hat Mono', monospace;
 font-size: 14px;
 text-align: center;
 max-width: 80vw;
 }

 .hg-lightbox-caption:empty {
 display: none;
 }

 .hg-lightbox-btn {
 position: absolute;
 top: 50%;
 transform: translateY(-50%);
 background: transparent;
 border: none;
 color: rgba(255,255,255,0.5);
 font-size: 3rem;
 cursor: pointer;
 padding: 20px;
 transition: color 0.2s;
 }

 .hg-lightbox-btn:hover {
 color: white;
 }

 .hg-lightbox-prev { left: 2%; }
 .hg-lightbox-next { right: 2%; }

 .hg-lightbox-close {
 position: absolute;
 top: 20px;
 right: 30px;
 background: none;
 border: none;
 color: white;
 font-size: 3rem;
 cursor: pointer;
 line-height: 1;
 opacity: 0.7;
 }

 .hg-lightbox-close:hover {
 opacity: 1;
 }

 @media (max-width: 720px) {
 .hg-lightbox-btn { font-size: 2rem; padding: 10px; }
 .hg-lightbox-prev { left: 0; }
 .hg-lightbox-next { right: 0; }
 }
 &lt;/style&gt;

 &lt;script&gt;
 document.addEventListener("DOMContentLoaded", () =&gt; {
 const galleries = document.querySelectorAll('.hugo-gallery');

 galleries.forEach(gallery =&gt; {
 const images = JSON.parse(gallery.getAttribute('data-images'));
 const titles = JSON.parse(gallery.getAttribute('data-titles') || '[]');
 const isSingle = gallery.classList.contains('hg-single');
 let currentIndex = 0;

 const mainView = gallery.querySelector('.hg-main-view');
 const mainImg = gallery.querySelector('.hg-current-image');
 const mainCaption = gallery.querySelector('.hg-current-caption');

 const lightbox = gallery.querySelector('.hg-lightbox');
 const lbImg = gallery.querySelector('.hg-lightbox-content');
 const lbCaption = gallery.querySelector('.hg-lightbox-caption');
 const lbClose = gallery.querySelector('.hg-lightbox-close');
 const lbPrev = gallery.querySelector('.hg-lightbox-prev');
 const lbNext = gallery.querySelector('.hg-lightbox-next');

 const titleFor = (i) =&gt; (titles[i] || '').trim();

 const updateGallery = (index) =&gt; {
 currentIndex = (index + images.length) % images.length;
 const src = images[currentIndex];
 const title = titleFor(currentIndex);
 mainImg.src = src;
 if (mainCaption) mainCaption.textContent = title;
 if (lbImg) lbImg.src = src;
 if (lbCaption) lbCaption.textContent = title;
 };

 const openLightbox = () =&gt; {
 lbImg.src = images[currentIndex];
 if (lbCaption) lbCaption.textContent = titleFor(currentIndex);
 lightbox.classList.add('show');
 document.body.style.overflow = 'hidden';
 if (lbClose) lbClose.focus();
 };

 const closeLightbox = () =&gt; {
 lightbox.classList.remove('show');
 document.body.style.overflow = '';
 };

 if (!isSingle) {
 const btnPrev = gallery.querySelector('.hg-prev');
 const btnNext = gallery.querySelector('.hg-next');
 const counter = gallery.querySelector('.hg-counter');

 const updateAll = (index) =&gt; {
 updateGallery(index);
 counter.textContent = `${currentIndex + 1} / ${images.length}`;
 };

 btnPrev.addEventListener('click', () =&gt; updateAll(currentIndex - 1));
 btnNext.addEventListener('click', () =&gt; updateAll(currentIndex + 1));
 updateAll(0);
 }

 mainView.addEventListener('click', openLightbox);

 lbClose.addEventListener('click', closeLightbox);
 lightbox.addEventListener('click', (e) =&gt; {
 if (e.target === lightbox) closeLightbox();
 });

 if (lbPrev &amp;&amp; lbNext) {
 lbPrev.addEventListener('click', (e) =&gt; {
 e.stopPropagation();
 currentIndex = (currentIndex - 1 + images.length) % images.length;
 updateGallery(currentIndex);
 });
 lbNext.addEventListener('click', (e) =&gt; {
 e.stopPropagation();
 currentIndex = (currentIndex + 1) % images.length;
 updateGallery(currentIndex);
 });
 }

 document.addEventListener('keydown', (e) =&gt; {
 if (!lightbox.classList.contains('show')) return;
 if (e.key === 'Escape') closeLightbox();
 if (!isSingle) {
 if (e.key === 'ArrowLeft') {
 currentIndex = (currentIndex - 1 + images.length) % images.length;
 updateGallery(currentIndex);
 }
 if (e.key === 'ArrowRight') {
 currentIndex = (currentIndex + 1) % images.length;
 updateGallery(currentIndex);
 }
 }
 });
 });
 });
 &lt;/script&gt;


&lt;p&gt;The goal is a speech to speech model that runs entirely on a phone. Not a cloud API with a thin client. The model should live on device, listening continuously, ready to respond in under 150 milliseconds. It should call tools, handle interruptions mid sentence, and work across languages. Here is the current design direction.&lt;/p&gt;</description></item><item><title>Matra</title><link>https://yenupam.com/projects/matra/</link><pubDate>Sun, 07 Jun 2026 00:00:00 +0000</pubDate><guid>https://yenupam.com/projects/matra/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Technical report: &lt;a href="./matra_paper_200k.pdf"&gt;matra_paper_200k.pdf&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;LLM with Matra as tokenizer is still pending. If anyone wants to help me with compute, hmu @ &lt;a href="mailto:yenupam@gmail.com"&gt;e-mail&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="live-demo"&gt;Live Demo&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;note: visit &lt;a href="https://huggingface.co/spaces/yenupam/matra-tokenizer-visualizer"&gt;huggingface space link&lt;/a&gt; if the embed fails to load.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;iframe
 src="https://yenupam-matra-tokenizer-visualizer.static.hf.space"
 frameborder="0"
 width="100%"
 height="500"
&gt;&lt;/iframe&gt;
&lt;h1 id="matra-a-tokenizer-built-for-indias-languages"&gt;Matra: A Tokenizer Built for India&amp;rsquo;s Languages&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;200k, 128k vocab size. 23 languages. The lowest token counts and highest compression across the board.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In active development, more optimzation, tests, language specific tokenizers coming soon.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Most tokenizers treat Indian languages as an afterthought, fragmented syllables and half-formed characters scattered across a vocabulary designed for English. Matra was built from the ground up to fix that. The result, benchmarked on June 15 2026 against the IN22-Gen test split at 200k tokens per language, is unambiguous: Matra produces fewer tokens, denser representations, and dramatically lower fragmentation than GPT-5, Gemini 3.5 Flash, Gemma-4-31B, Qwen-3.6-MoE, Sarvam-105B, and Sutra-v2 across all 23 scheduled languages of India.&lt;/p&gt;</description></item><item><title>Desi Maximalism</title><link>https://yenupam.com/projects/desi-maximalism/</link><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><guid>https://yenupam.com/projects/desi-maximalism/</guid><description>&lt;h2 id="project-overview"&gt;Project Overview&lt;/h2&gt;
&lt;p&gt;The Desi Maximalism LoRA is a specialized text-to-image style transfer model engineered to recreate the rich, dense, and vibrant aesthetic of mid-century Indian commercial art. It acts as a cultural bridge for generative AI, accurately reproducing the nostalgic visual language of 1940s–1985s South Asian matchbox labels, product packaging, magazine ads, and hand-painted film posters.&lt;/p&gt;
&lt;h2 id="sample-generations"&gt;Sample Generations&lt;/h2&gt;




 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 

 





 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 






&lt;div class="hugo-gallery" id="gallery-863721945"
 data-images="[&amp;#34;/projects/desi-maximalism/bournvita_hu_22c735d316f3ce7d.png&amp;#34;,&amp;#34;/projects/desi-maximalism/google-2_hu_81e20895a3fc4cf4.png&amp;#34;,&amp;#34;/projects/desi-maximalism/pulse_hu_44652b0ffa9b5b69.png&amp;#34;,&amp;#34;/projects/desi-maximalism/bharat-ai_hu_ab63da28481ccccc.png&amp;#34;,&amp;#34;/projects/desi-maximalism/lenskart_hu_aee09201b0097e9d.png&amp;#34;,&amp;#34;/projects/desi-maximalism/maggi_hu_6111204de5ea9669.png&amp;#34;,&amp;#34;/projects/desi-maximalism/gen-2_hu_a3a1861a944cb3b7.png&amp;#34;,&amp;#34;/projects/desi-maximalism/drama-queen_hu_7104b3309796d5cf.png&amp;#34;]"
 data-titles="[&amp;#34;Bournvita retro tin packaging&amp;#34;,&amp;#34;Google India ad&amp;#34;,&amp;#34;Pulse candy vintage label&amp;#34;,&amp;#34;Bharat AI vintage poster&amp;#34;,&amp;#34;Lenskart&amp;#34;,&amp;#34;Maggi noodles&amp;#34;,&amp;#34;Generation #2&amp;#34;,&amp;#34;Drama Queen&amp;#34;]"
 data-index="0"&gt;
 &lt;figure class="hg-figure"&gt;
 &lt;div class="hg-main-view"&gt;
 &lt;img src="https://yenupam.com/projects/desi-maximalism/bournvita_hu_22c735d316f3ce7d.png" alt="Bournvita retro tin packaging" class="hg-current-image" loading="lazy"&gt;
 &lt;/div&gt;
 &lt;figcaption class="hg-caption hg-current-caption"&gt;Bournvita retro tin packaging&lt;/figcaption&gt;
 &lt;/figure&gt;

 
 &lt;div class="hg-controls"&gt;
 &lt;button class="hg-btn hg-prev" aria-label="Previous Image"&gt;◄─── prev&lt;/button&gt;
 &lt;span class="hg-counter"&gt;1 / 8&lt;/span&gt;
 &lt;button class="hg-btn hg-next" aria-label="Next Image"&gt;next ────►&lt;/button&gt;
 &lt;/div&gt;
 

 &lt;div class="hg-lightbox"&gt;
 &lt;button class="hg-lightbox-close" aria-label="Close Lightbox"&gt;&amp;times;&lt;/button&gt;
 
 &lt;button class="hg-lightbox-btn hg-lightbox-prev"&gt;&amp;#10094;&lt;/button&gt;
 
 &lt;figure class="hg-lightbox-figure"&gt;
 &lt;img class="hg-lightbox-content" src="" alt="Zoomed Gallery Image"&gt;
 &lt;figcaption class="hg-lightbox-caption"&gt;&lt;/figcaption&gt;
 &lt;/figure&gt;
 
 &lt;button class="hg-lightbox-btn hg-lightbox-next"&gt;&amp;#10095;&lt;/button&gt;
 
 &lt;/div&gt;
&lt;/div&gt;



&lt;h2 id="model-specifications"&gt;Model Specifications&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Feature&lt;/th&gt;
 &lt;th&gt;Specification&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Base Model&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Qwen/Qwen-Image-2512&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Fine-Tuning Method&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;LoRA (Low-Rank Adaptation)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Task&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Text-to-image • Style transfer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Trigger Word&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;desi-max&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Apache 2.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="dataset--curation-strategy"&gt;Dataset &amp;amp; Curation Strategy&lt;/h2&gt;
&lt;p&gt;The model is trained on a highly focused dataset of 78 meticulously handpicked images of vintage South Asian commercial print. Each image was manually selected to represent a distinct visual sub-pattern. This strict curation keeps the dataset tight and entirely avoids the &amp;ldquo;style collapse&amp;rdquo; common in broader, noisier generative models.&lt;/p&gt;</description></item></channel></rss>