DEDUPED Hot AI repos, turned into use cases Get 5 a day

How to add a live talking face to a Python voice agent with Openspline

Stream your agent's generated audio into a portrait to show a synced avatar.

  • Top pick
  • Content
  • Intermediate
  • 30 minutes
  • From the README
  • Any agent

Authorization notice. Openspline is dual-use. Only use it on software, sites and systems you own or have explicit permission to test.

Credentials. Keep the OpenSpline API key and any provider credentials on your backend, not in browser code.

Who it is forA developer with a working Python voice agent who wants a visible face for demos or customer-facing sessions.

The problemVoice agents are audio-only, so users have no face to read or connect with during a conversation.

The outcomeA viewer URL that shows a portrait speaking the agent's audio in sync.

What you need first

  • A portrait image of the face to animate, with rights to use it
  • Python 3.x or Node 20+ for the SDK
  • Either an OpenSpline Cloud API key or a Linux or WSL2 machine with an NVIDIA GPU
  • An existing voice AI agent or a TTS provider that outputs PCM audio

Steps

  1. Run pip install openspline.
  2. Set OPENSPLINE_API_KEY on your backend, or run a local service as described in the Self Host section.
  3. Create the client and open the avatar with async with client.avatar("portrait.jpg", quality="low") as avatar:, then print avatar.viewer_url.
  4. Call await avatar.stream(agent.audio_stream(), sample_rate=24000) with your agent's PCM audio.
  5. Open the viewer URL in a browser while the agent speaks.

Prompt for your agent

Use the openspline repo (github.com/openspline/openspline) to add an avatar to the Python voice agent at <path-to-agent>. Use portrait <path-to-portrait.jpg> and pass the agent's PCM audio to avatar.stream with sample_rate=24000. Output the viewer URL and confirm the agent's audio plays once, not twice.

Caveat. The README says the GPU stays active during a connected session and smooth motion requires inference to keep up with playback.

Share: X LinkedIn Hacker News Email Copy link

Disclaimer

Deduped lists open-source repositories that belong to other people. We do not own, maintain, audit, or vouch for any of them, and a repo appearing here is not an endorsement or a safety check. The use cases, steps, and prompts are written by AI and may be incomplete, outdated, or just wrong. Where a use case is marked "Seen in the wild", we link to public posts where someone described something similar, but we have not verified those posts and the use case itself is still our AI's own write-up. Use all of this at your own risk. Only run code, commands, or agents on systems and accounts you are authorized to use, and read the code and every command before you run it, especially anything that touches credentials, files, or the network. Nothing here is professional, security, legal, or financial advice. All trademarks and project names belong to their respective owners, and their use here does not imply affiliation. Content is provided as is, without warranties of any kind. Found a mistake, a safety problem, or something you want removed? Email [email protected] and we will look at it promptly. Full disclaimer page