<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Diffusion Models | Dat Viet Thanh Nguyen</title><link>https://datvtn.github.io/tags/diffusion-models/</link><atom:link href="https://datvtn.github.io/tags/diffusion-models/index.xml" rel="self" type="application/rss+xml"/><description>Diffusion Models</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Wed, 01 Jan 2025 00:00:00 +0000</lastBuildDate><image><url>https://datvtn.github.io/media/icon_hu82c06b08a282889123d30d9b11b05ced_13465_512x512_fill_lanczos_center_3.png</url><title>Diffusion Models</title><link>https://datvtn.github.io/tags/diffusion-models/</link></image><item><title>Personality-Driven AI Avatar Bot</title><link>https://datvtn.github.io/project/personality-driven-ai-bot/</link><pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate><guid>https://datvtn.github.io/project/personality-driven-ai-bot/</guid><description>&lt;p>&lt;strong>Dec 2023 – Jan 2025&lt;/strong>&lt;/p>
&lt;h2 id="problem">Problem&lt;/h2>
&lt;p>Group chat applications are text-first. Adding an AI participant that feels like a &lt;em>character&lt;/em> rather than a chat completion means giving it a face, a voice, and a consistent personality — and generating all of that fast enough that it can take part in a live conversation rather than replying minutes later.&lt;/p>
&lt;h2 id="approach">Approach&lt;/h2>
&lt;p>I built the avatar generation side of the product: turning a character definition into a speaking AI avatar that could be dropped into a group chat.&lt;/p>
&lt;p>The pipeline combines several pieces I had been building in parallel:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Identity generation&lt;/strong> — a consistent visual identity per character, stable across every clip the bot produces.&lt;/li>
&lt;li>&lt;strong>Audio-driven talking head&lt;/strong> — driving lip-sync and head motion from a single audio stream while preserving the character&amp;rsquo;s identity, head pose, and facial expression.&lt;/li>
&lt;li>&lt;strong>Expression control&lt;/strong> — routing the character&amp;rsquo;s intended emotion (joy, sadness, anger) into the generated video, so the avatar&amp;rsquo;s delivery matches the tone of what it is saying.&lt;/li>
&lt;li>&lt;strong>Real-time diffusion video&lt;/strong> — a Stable Diffusion video generation pipeline producing avatar speech video directly from audio input.&lt;/li>
&lt;/ul>
&lt;p>The engineering constraint throughout was latency: a conversational avatar that lags is worse than no avatar, so each stage was optimised for real-time or near-real-time throughput rather than best-possible offline quality.&lt;/p>
&lt;h2 id="tech-stack">Tech stack&lt;/h2>
&lt;p>&lt;code>PyTorch&lt;/code> · &lt;code>Stable Diffusion&lt;/code> · &lt;code>TensorRT&lt;/code> · &lt;code>Python&lt;/code> · &lt;code>Docker&lt;/code>&lt;/p>
&lt;h2 id="outcome">Outcome&lt;/h2>
&lt;p>Shipped as the avatar generation component of a group chat application.&lt;/p>
&lt;!-- TODO: add concrete numbers here if they can be shared — e.g. end-to-end latency per utterance, resolution/FPS of generated video, number of supported characters. --></description></item></channel></rss>