<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Alex Viser]]></title><description><![CDATA[Alex Viser]]></description><link>https://alexviser.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 31 Oct 2026 11:02:31 GMT</lastBuildDate><atom:link href="https://alexviser.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[I gave my ElevenLabs voice agent a face (and it took less code than I expected)]]></title><description><![CDATA[For a while, my voice agent was just that: a voice. It worked, but talking to a disembodied audio stream always felt a little like talking to a smart…]]></description><link>https://alexviser.hashnode.dev/i-gave-my-elevenlabs-voice-agent-a-face-and-it-took-less-code-than-i-expected</link><guid isPermaLink="true">https://alexviser.hashnode.dev/i-gave-my-elevenlabs-voice-agent-a-face-and-it-took-less-code-than-i-expected</guid><category><![CDATA[AI]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[agentic AI]]></category><dc:creator><![CDATA[Alex Viser]]></dc:creator><pubDate>Wed, 28 Oct 2026 10:27:23 GMT</pubDate><content:encoded><![CDATA[<p>For a while, my voice agent was just that: a voice. It worked, but talking to a disembodied audio stream always felt a little like talking to a smart speaker.</p>
<p>Then I came across <strong>Openspline</strong>, whose tagline is "Give your AI a face." I was skeptical. Avatar tools usually mean heavy setup, expensive plans, or being locked into one platform. But a few things made me try it:</p>
<ul>
<li>It plugs into stacks I already use: <strong>ElevenLabs, LiveKit, OpenAI Realtime, Gemini Live, Pipecat</strong>, or any audio stream</li>
<li>I could either <strong>self-host</strong> it or use their <strong>cloud</strong></li>
</ul>
<h2>What it actually does</h2>
<p>The idea is simple: you keep your own model, prompts, and voice. You <strong>send audio in and get synchronized video back</strong>.</p>
<p>Openspline doesn't replace your agent. It's the face that sits on top of it. That mattered to me because I didn't have to rebuild anything, and my ElevenLabs voice stayed exactly the same.</p>
<h2>Setting it up</h2>
<p>There are two ways to run it, and I went with the cloud.</p>
<p><strong>Self-host:</strong> you need an NVIDIA GPU and Linux or WSL2. The install is a one-liner from their docs.</p>
<p><strong>Openspline Cloud:</strong> you create an avatar in the browser with a face, a voice, and a personality, then embed it. There's no GPU to manage.</p>
<h2>The code</h2>
<p>This was the part that surprised me. Here's the core of the Python SDK, straight from their docs:</p>
<pre><code class="language-python">from openspline import Openspline

client = Openspline()

async with client.avatar("portrait.jpg") as avatar:
    print(avatar.viewer_url)
    await avatar.stream(
        agent.audio_stream(), sample_rate=24000
    )
</code></pre>
<p>You give it a portrait image, open an avatar session, and stream your agent's audio into it. You get back a <code>viewer_url</code> where the face appears and talks.</p>
<h2>Where I'd use this</h2>
<p>Openspline's site suggests customer support, AI tutors, interviews, and sales. I used that for fun making Leonardo Da Vinci to roast my startup idea.</p>
<ul>
<li>Heres the link : <a href="https://dashboard.openspline.dev/leonardo-da-vinci-1">Link</a></li>
</ul>
<p>If you already have a voice agent and want it to feel less like a phone call, give it a try:</p>
<ul>
<li>Docs: <a href="https://docs.openspline.dev/">docs.openspline.dev</a></li>
<li>GitHub: <a href="https://github.com/openspline/openspline">github.com/openspline/openspline</a></li>
<li>Website: <a href="https://www.openspline.dev/">openspline.dev</a></li>
</ul>
<p>If you try it, drop a comment and tell me what you build!</p>
]]></content:encoded></item></channel></rss>