Build an AI Interview Avatar
Build a real-time AI avatar of yourself that attends Zoom interviews.
Introduction
30 Second Summary
Imagine sending a version of yourself to a job interview while you sit back and watch it answer questions in real time.
In this project, you will build a real-time AI avatar that looks like you, speaks like you, and answers interview questions using your actual resume and experience. You will wire together four AI services into a single conversational pipeline and connect the avatar to Zoom so it can attend real video calls.
What You'll Build
A real-time AI interview avatar connected to Zoom that listens to questions, generates intelligent answers from your background, speaks them aloud, and syncs lip movements to your face video.
By the end of this project, you'll have:
- A multi-service AI pipeline combining Whisper (speech-to-text), Groq (LLM), ElevenLabs (text-to-speech), and Decart (lip-sync video generation) running together in real time.
- A custom YAML character file loaded with your resume, skills, and interview talking points as the AI's knowledge base.
- A full Zoom integration using OBS Studio Virtual Camera for video and BlackHole for bidirectional audio routing.
- A Secret Mission to clone your own voice using ElevenLabs Instant Voice Cloning so the avatar truly sounds like you.
Are there any prerequisites?
You should have basic Python knowledge and be comfortable using the Terminal on your Mac. All the AI services used in this project have free tiers or free credits for new accounts, so the total cost ranges from $0 to $2. The Secret Mission's voice cloning feature requires ElevenLabs' Starter plan at $5/month.
Set Up Your Development Environment
Your AI avatar relies on a Python project called Sidekick that orchestrates the entire conversation pipeline.
Before you can run it, you need Python 3.10+ installed, the Sidekick source code cloned to your Mac, and all its dependencies ready to go.
In This Step, Get Ready To:
- Install Python 3.10+ on your Mac.
- Clone the Sidekick repository and install its dependencies in a virtual environment.
- Create your .env file for API keys.
Install Python 3.10+ on Your Mac
Sidekick and the Decart Python SDK both require Python 3.10 or higher. Your Mac may already have a compatible version installed. Let's check first.
- Open Terminal.
- Run the following command to check your Python version:
python3 --version
I see Python 3.10 or higher
You're all set. Skip ahead to the next substep.
I see a lower version or command not found
You need to install a newer version of Python. The easiest way on Mac is through Homebrew.
If you don't have Homebrew installed yet, install it first:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Then install Python:
brew install python@3.12
- Verify the installation by running python3 --version again.
You should see 3.10 or higher in the output.
Still seeing an old Python version?
Try running python3.12 --version directly. If that works, use python3.12 instead of python3 for the rest of this project. You may need to restart your Terminal for the new version to appear on your path. Help me troubleshoot my Python installation.
Clone the Sidekick Repository and Set Up the Virtual Environment
Sidekick is an open-source project from Decart that handles the entire real-time conversation pipeline. You'll clone it from GitHub and install its dependencies inside a virtual environment to keep everything isolated from your system Python.
- Clone the Sidekick repository:
git clone https://github.com/DecartAI/sidekick.git
- Navigate into the project directory:
cd sidekick
- Create a virtual environment:
python3 -m venv .venv
- Activate the virtual environment:
source .venv/bin/activate
You should see (.venv) appear at the beginning of your Terminal prompt. This confirms you're working inside the virtual environment.
- Install all project dependencies:
pip install -r requirements.txt
What does this command do?
The requirements.txt file lists every Python package Sidekick needs. This includes Pipecat for pipeline orchestration, the Groq and ElevenLabs SDKs, WebRTC libraries, and more. The pip install -r command reads that file and installs everything automatically.
This installation may take a minute or two depending on your internet connection.
Seeing errors during installation?
Make sure your virtual environment is activated (you should see (.venv) in your prompt). Also confirm you're running Python 3.10+ by checking python3 --version. Help me debug my pip install errors.
What is a virtual environment?
A virtual environment is an isolated Python installation inside your project folder. Packages you install here won't affect your system Python or other projects. When you're done working, you can deactivate it by running deactivate in your Terminal.
Create Your .env File From the Template
Sidekick reads API keys from a .env file in the project root. The repo includes a template file called .env.example with placeholder values for each key you'll need.
- Copy the example file to create your own .env:
cp .env.example .env
What does this command do?
The cp command copies a file. You're creating a personal copy of the template so you can fill in your own API keys without modifying the original. The .env file is already listed in .gitignore, so your keys won't accidentally get committed to Git.
- Open the .env file in your text editor to take a look at its contents.
You'll see placeholders for three API keys: GROQ_API_KEY, ELEVENLABS_API_KEY, and DECART_API_KEY. Don't fill these in yet. You'll sign up for each service and grab the keys in the next step.
Your development environment is ready. Next up, you'll create free accounts on Groq, ElevenLabs, and Decart to get the API keys that power your avatar's brain, voice, and lip-sync.
Sign Up for Free API Accounts and Configure Keys
Your avatar pipeline relies on three external AI services working together. Groq handles the language model that generates intelligent answers. ElevenLabs converts those answers into spoken audio. Decart synchronizes your avatar's lip movements to the speech in real time. In this step, you'll create free accounts on all three platforms and wire their API keys into your project.
In This Step, Get Ready To:
- Create free accounts on Groq, ElevenLabs, and Decart.
- Generate API keys for each service.
- Add all three keys to your .env file so Sidekick can authenticate with each service.
Get Your Groq API Key
Groq provides extremely fast LLM inference. Sidekick uses Groq to run Llama 3.3 70B, the model that generates your avatar's interview answers. The free tier requires no credit card and is sufficient for testing.
- Go to console.groq.com and sign up for a free account.
- Navigate to **API Keys** in the left sidebar.
- Click Create API Key and give it a name like sidekick.
- Copy the key immediately. You won't be able to see it again after closing the dialog.
- Open your .env file and paste the key on the Groq line:
GROQ_API_KEY=your-groq-api-key-here
Why Groq Instead of OpenAI?
You already have an OpenAI API key, so you might wonder why we need Groq. Sidekick's pipeline is built to use Groq by default because of its record-setting inference speed. Real-time conversation needs fast responses, and Groq delivers that. Groq's API is also OpenAI-compatible, so your existing knowledge of OpenAI's API format transfers directly.
Get Your ElevenLabs API Key
ElevenLabs is the text-to-speech service that gives your avatar a voice. The free plan includes 10,000 credits per month (roughly 10 minutes of speech) and access to over 3,000 voices.
- Go to elevenlabs.io and sign up for a free account.
- Click your profile icon in the bottom-left corner of the dashboard.
- Select Profile + API key.
- Copy your API key from the profile settings page.
- Add it to your .env file:
ELEVENLABS_API_KEY=your-elevenlabs-api-key-here
Pro tip: watch your credits
The free plan gives you about 10 minutes of generated speech per month. Each time your avatar speaks during testing, it uses credits. Keep your test conversations short while you're setting things up.
Get Your Decart API Key
Decart powers the lip-sync video generation. It takes your avatar's face video and the spoken audio, then produces a new video with lip movements matching the speech in real time. New accounts receive free credits for evaluation. The LipSync model costs $0.01/sec of active generation, so your free credits will cover several minutes of conversation.
- Go to platform.decart.ai and sign up for an account.
- Navigate to API Keys in the dashboard.
- Click Create API Key and copy the generated key.
- Add it to your .env file:
DECART_API_KEY=your-decart-api-key-here
What should I see?
Your .env file should now have three lines filled in with your actual keys. It will look something like this:
GROQ_API_KEY=gsk_abc123...
ELEVENLABS_API_KEY=sk_def456...
DECART_API_KEY=dct_ghi789...
Never commit your .env file to Git
Your .env file contains sensitive API keys. The Sidekick repo's .gitignore should already exclude it, but double-check that .env appears in your .gitignore file before making any commits.
Having trouble signing up for any service?
If you're running into issues creating an account or finding your API key on any of these platforms, help me troubleshoot my API account setup.
All three services are now connected to your project. Next up, you'll record a short video of your face and build the character file that turns your avatar into an interview-ready version of you.
Record Your Avatar Video and Create Your Interview Character
Your API keys are configured and ready to power the AI pipeline. Now it's time to give your avatar a face and a brain. In this step, you'll record a short video of yourself and create a YAML character file that defines everything your avatar knows. This file holds your resume, interview strategy, and personality so the LLM can answer questions as you.
In This Step, Get Ready To:
- Record a short face video for the lip-sync avatar.
- Choose an ElevenLabs voice for your avatar.
- Create a character YAML file loaded with your professional background as the system prompt.
Record a 10-15 Second Video of Your Face
The Decart lip-sync model needs a short video of your face as the base for generating synchronized lip movements. The higher the quality and simpler the background, the better your avatar will look during conversations.
- Open Photo Booth, QuickTime Player, or use your phone to record a 10-15 second video of your face.
- Keep your face centered and look straight at the camera with a neutral expression.
- Use a simple, clean background like a plain wall.
- Make sure the lighting is even across your face. Avoid harsh shadows.
- Save the video as an MP4 file.
Pro tip: static beats expressive
A calm, still face with minimal movement gives the lip-sync model the best starting point. The model handles all the mouth and lip animation from there. Exaggerated expressions or head movements can produce glitchy results.
Now move your video into the Sidekick project so the server can find it.
- Create a videos directory inside the Sidekick project folder.
mkdir -p videos
- Copy your video into the new directory.
cp ~/path/to/your_video.mp4 videos/my_avatar.mp4
What does this command do?
The cp command copies your video file into the videos/ directory you just created. Replace ~/path/to/your_video.mp4 with the actual path to wherever you saved your recording. For example, if you recorded with Photo Booth, the file might be in ~/Pictures/Photo Booth Library/.
Choose a Voice and Create Your Character YAML File
Sidekick uses YAML character files to define everything about an avatar. The character file tells the system which voice to use, which video to animate, and what the LLM should know when generating responses. This is where you turn your resume and interview prep into the avatar's brain.
- Go to elevenlabs.io and browse the Voice Library.
- Find a voice that sounds close to yours. Click on voices to preview them.
- Note the voice ID from the voice's settings page. You'll need this for your character file.
Why pick a stock voice?
The ElevenLabs free plan gives you access to over 3,000 voices but does not include Instant Voice Cloning. Cloning your actual voice requires the Starter plan at $5/month. For now, a stock voice that sounds similar to yours works great. The Secret Mission at the end covers voice cloning if you want to upgrade later.
Now create the character file that defines your interview avatar.
- Create a new file called my_interview.yaml in the Sidekick project root.
- Paste the following template into the file.
name: YourName
voice_id: your_elevenlabs_voice_id
video_path: videos/my_avatar.mp4
greeting: "Hi, thanks for having me today. I'm excited to tell you about my experience."
system_prompt: |
You are [Your Name], a [your role/title] with [X years] of experience.
You are in a job interview. Answer questions professionally, concisely, and confidently.
Your background:
- [Your education]
- [Your key skills]
- [Your work experience summary]
Key projects and achievements:
- [Project 1 and its impact]
- [Project 2 and its impact]
When asked behavioral questions, use the STAR method (Situation, Task, Action, Result).
Keep answers under 60 seconds of speaking time (about 150 words).
Be enthusiastic but genuine. Never make up experience you do not have.
What does each field do?
- name is the display name for your avatar character.
- voice_id tells ElevenLabs which voice to use for text-to-speech.
- video_path points to the face video that Decart will animate with lip-sync.
- greeting is the first thing your avatar says when a conversation starts.
- system_prompt is the instruction set for the LLM. This is where your resume, skills, and interview strategy live. The more detail you add here, the better your avatar's answers will be.
- Replace all the placeholder text in brackets with your actual details. Fill in your real name, role, education, skills, and key projects.
- Replace your_elevenlabs_voice_id with the voice ID you noted from the ElevenLabs Voice Library.
- Save the file.
Pro tip: be specific in your system prompt
The system_prompt is the single most important part of your character file. Generic prompts produce generic answers. Include specific project names, technologies you used, metrics you achieved, and the kind of role you're interviewing for. Think of it as feeding your avatar a cheat sheet for the interview.
Review the Example Character Files for Reference
The Sidekick repo includes example character files that show how other avatars are configured. Reviewing these helps you understand the patterns and gives you ideas for improving your own character file.
- Open cleopatra.yaml in your editor to see how a historical character is configured.
- Open v1x3n.yaml to see a different character style.
Notice how each character's system_prompt shapes its personality and knowledge base. Your interview character follows the same structure, just loaded with your real professional background instead of a fictional persona.
Why YAML for character configuration?
YAML files are human-readable configuration files. They let you change your avatar's personality, voice, and knowledge without touching any Python code. Want to prep for a different role? Just create a new YAML file with a different system prompt and swap it in when you start the server.
Your avatar now has a face and a brain. Next up, you'll launch the Sidekick server and watch your avatar come to life in the browser.
Test Your AI Avatar Locally
You have your video recorded, your character file written, and all your API keys configured. Before wiring everything into Zoom, you need to confirm the full AI pipeline actually works. In this step, you will launch the Sidekick server and have a test conversation with your avatar in the browser.
In This Step, Get Ready To:
- Launch the Sidekick server with your custom character file.
- Connect to your avatar in the browser and verify the full pipeline works.
- Ask your avatar interview questions and confirm it responds with lip-synced video and audio.
Start the Sidekick Server
The Sidekick server orchestrates the entire AI pipeline. When it starts, it loads your character YAML, connects to all four APIs, and opens a WebRTC endpoint that the browser client can connect to.
- Open Terminal and navigate to your Sidekick project directory.
- Make sure your virtual environment is activated.
source .venv/bin/activate
- Start the server with your character file.
python sidekick.py --character my_interview.yaml --mlx
What does this command do?
The --character flag tells Sidekick which YAML file to load for the avatar's personality, voice, and video. The --mlx flag enables MLX-optimized Whisper for faster speech-to-text on Apple Silicon Macs (M1/M2/M3/M4).
Pro tip: Intel Mac users
If you are on an Intel Mac, omit the --mlx flag. Run python sidekick.py --character my_interview.yaml instead. The MLX optimization is specific to Apple Silicon chips.
What should I see?
You should see output in Terminal indicating the server is running on port 8080. The server will load your character file and connect to the Groq, ElevenLabs, and Decart APIs. If any API key is missing or invalid, you will see an error here.
Seeing an API key error?
Double-check your .env file. Make sure each key is on its own line with no extra spaces around the = sign. Verify that your virtual environment is activated (you should see (.venv) in your Terminal prompt). Help me debug my API key error.
Connect and Test in the Browser
With the server running, you can now connect to your avatar through the browser client. This is where you will see the full pipeline in action: your voice goes in, gets transcribed by Whisper, processed by Groq's LLM, spoken by ElevenLabs, and lip-synced by Decart.
- Open a new Terminal tab or window (keep the server running in the original one).
- Open the client file in your browser.
open client.html
What does this command do?
The open command on Mac opens a file with its default application. For an HTML file, this opens it in your default web browser. You can also double-click client.html in Finder to achieve the same result.
- Click the Connect button in the browser.
- Allow microphone access when your browser prompts you.
Your avatar video should appear, and you should hear the greeting message spoken aloud. This is the greeting you defined in your my_interview.yaml file.
- Ask your avatar a few interview questions out loud to test the full pipeline. Try questions like "Tell me about yourself" or "What are your strengths?"
- Watch the avatar's lips move in sync with the spoken response.
Each question triggers the full pipeline: Whisper transcribes your speech, Groq generates an answer based on your system prompt, ElevenLabs converts that answer to speech, and Decart syncs your avatar's lip movements to the audio. All of this happens in real time.
What is the AI pipeline doing behind the scenes?
Sidekick uses Pipecat to orchestrate the pipeline. Your audio is captured via WebRTC, transcribed by Whisper locally on your Mac, sent to Groq's Llama 3.3 70B model for a response, converted to speech by ElevenLabs, and then lip-synced onto your face video by Decart. The entire round trip typically takes just a few seconds.
Avatar not responding or no audio?
Make sure your browser has microphone permissions enabled. Check the Terminal window running the server for any error messages. If you see rate limit errors from Groq, wait a minute and try again (the free tier has request limits). Help me troubleshoot my avatar connection.
Your avatar is alive and talking. Next up, you will install OBS Studio and BlackHole so you can pipe this avatar directly into a Zoom call.
Install OBS Studio and BlackHole for Zoom Integration
Your avatar is alive and talking in the browser. Now you need to get it into Zoom so an interviewer can actually see and hear it. The challenge is that Sidekick runs in a browser window via WebRTC. It does not natively connect to video conferencing apps. You need two tools to bridge the gap: OBS Studio to capture the avatar as a virtual camera, and BlackHole to route audio between Zoom and the avatar.
In This Step, Get Ready To:
- Install OBS Studio and grant it the macOS permissions it needs.
- Install BlackHole and configure virtual audio devices in Audio MIDI Setup.
- Set up OBS to capture your Sidekick browser window as a video source.
Install OBS Studio
OBS Studio is a free, open-source tool for video recording and live streaming. Starting from version 26.1.1, it includes a Virtual Camera feature built-in for Mac. This feature outputs whatever OBS is displaying as a webcam that Zoom can detect.
- Download OBS Studio from obsproject.com and install it.
- Open OBS once to complete the initial setup wizard.
- When prompted, grant OBS both Screen Recording and Camera permissions.
- If the permission prompts do not appear automatically, go to System Settings, then Privacy & Security, then Screen Recording and add OBS. Do the same under Camera.
Why does OBS need Screen Recording permission?
OBS will capture your browser window showing the Sidekick avatar. On macOS, any app that reads pixels from another window needs explicit Screen Recording permission. Without it, OBS will only show a black screen.
Install BlackHole for Audio Routing
BlackHole is a free, open-source virtual audio loopback driver for Mac. It creates a virtual audio device that lets you route audio between applications with zero additional latency. You need it so that Zoom's audio (the interviewer's voice) reaches Sidekick, and Sidekick's audio (your avatar's voice) reaches Zoom.
- Install BlackHole 2ch via Homebrew:
brew install blackhole-2ch
What does this command do?
This installs BlackHole 2ch (v0.6.1), a 2-channel virtual audio driver. It is compatible with macOS 10.10 and later, including Apple Silicon Macs. The "2ch" means it creates a stereo (2-channel) virtual audio device, which is all you need for voice conversations.
Now you need to create two virtual audio devices in Audio MIDI Setup. These devices control how audio flows between Zoom and Sidekick.
- Open Audio MIDI Setup from Applications, then Utilities, then Audio MIDI Setup.
First, create a Multi-Output Device. This device sends Zoom's audio to both your speakers (so you can hear) and BlackHole (so Sidekick can hear).
- Click the + button at the bottom left of the Audio MIDI Setup window.
- Select Create Multi-Output Device.
- Check Built-In Output first, then check BlackHole 2ch.
- Enable Drift Correction for BlackHole 2ch. This keeps the audio streams synchronized.
Next, create an Aggregate Device. This device combines BlackHole's input with your built-in microphone into a single audio input source.
- Click the + button again.
- Select Create Aggregate Device.
- Check BlackHole 2ch and your Built-in Microphone.
- Enable Drift Correction for the microphone.
What Is Drift Correction?
Different audio devices run on slightly different internal clocks. Over time, these clocks drift apart, causing audio glitches like pops or desync. Drift Correction compensates for this by continuously adjusting the timing so the audio streams stay aligned.
Configure OBS to Capture the Sidekick Browser Window
With OBS and BlackHole installed, you can now set up OBS to capture the browser window where your avatar is running. OBS will turn this capture into a virtual camera that Zoom recognizes as a webcam.
- Make sure your Sidekick server is running and the avatar is visible in your browser (client.html). Make sure the browser window is NOT in full-screen mode.
- Open OBS Studio.
- In the Scenes panel at the bottom, click the + button to create a new Scene. Name it something like "Avatar."
- In the Sources panel, click the + button to add a new source.
- Select macOS Screen Capture if you are on macOS 13 or later. On older macOS versions, select Window Capture instead.
- Choose the browser window running your Sidekick avatar (client.html).
- Resize and crop the source so only the avatar video fills the OBS preview frame. Right-click the source, select Transform, then Fit to screen. You can also drag the red edges to manually crop out browser chrome.
Pro tip: use macOS Screen Capture
On macOS 13 and later, macOS Screen Capture uses Apple's ScreenCaptureKit and is significantly more performant than the older Window Capture source. It can also capture a single window with its audio. Window Capture is deprecated on macOS 13+.
You should now see your avatar's face in the OBS preview window. The avatar video is being captured and is ready to be output as a virtual camera.
Seeing a black screen in OBS?
This usually means OBS does not have Screen Recording permission. Go to System Settings, then Privacy & Security, then Screen Recording, and make sure OBS is listed and enabled. You may need to quit and reopen OBS after granting the permission. Also make sure your browser window is not in full-screen mode. Help me troubleshoot my OBS capture.
Your video and audio tools are ready. In the next step, you will start OBS Virtual Camera, configure Zoom to use it, and run your first avatar-powered Zoom call.
Connect Your Avatar to Zoom
Your avatar is alive and talking in the browser. Now it is time to bring it into a real Zoom call so an interviewer sees your avatar on camera and hears it respond to their questions. You will wire up OBS Virtual Camera for video and BlackHole for audio so that Zoom treats your avatar as a real webcam and microphone.
In This Step, Get Ready To:
- Start OBS Virtual Camera so Zoom can use your avatar as a webcam.
- Configure Zoom's video and audio settings to use OBS and BlackHole.
- Test a live Zoom call with your AI avatar visible and speaking.
Start OBS Virtual Camera
OBS needs to be broadcasting its virtual camera before Zoom launches. Zoom detects available cameras at startup, so if OBS Virtual Camera is not running yet, Zoom will not see it.
- Make sure your Sidekick server is still running and the avatar is visible in the browser.
- Open OBS Studio.
- Confirm that your Scene from the previous step is still capturing the Sidekick browser window correctly.
- Click Start Virtual Camera in the Controls panel at the bottom-right of OBS.
Always start OBS before Zoom
Zoom detects cameras when it launches. If you open Zoom first and start OBS Virtual Camera after, Zoom will not see it. Always click Start Virtual Camera in OBS before opening the Zoom app.
Configure Zoom to Use OBS and BlackHole
Zoom needs two things: a video source (your avatar via OBS) and an audio routing setup (BlackHole). The video side is straightforward. The audio side involves two directions of flow. Zoom's speaker output needs to reach Sidekick so it can hear the interviewer's questions. Sidekick's spoken responses need to flow back into Zoom as your microphone input.
- Open Zoom (after OBS Virtual Camera is already running).
- Go to Settings, then select Video.
- Select OBS Virtual Camera as your camera.
You should see your avatar appear in the Zoom video preview. Now set up the audio routing.
- Go to Settings, then select Audio.
- Set the Speaker (output) to Multi-Output Device. This sends Zoom audio to both your speakers and BlackHole, so Sidekick can hear the interviewer.
- Set the Microphone (input) to BlackHole 2ch. This routes Sidekick's spoken audio output into Zoom as your microphone.
- Uncheck Automatically adjust microphone volume to keep audio levels consistent.
How Does the Audio Flow Work?
There are two audio paths happening at the same time. The interviewer speaks in Zoom, and Zoom sends that audio to the Multi-Output Device. The Multi-Output Device splits it to your speakers (so you can listen in) and to BlackHole. Sidekick picks up the audio from BlackHole, transcribes it, generates a response, and speaks it back through BlackHole. Zoom reads BlackHole as your microphone, so the interviewer hears the avatar's response.
Browser Audio Input May Need Configuration
Sidekick's WebRTC pipeline picks up audio through the browser. Your browser may need its audio input set to the Aggregate Device you created in the previous step so it can receive audio from BlackHole. If Sidekick is not hearing the interviewer, check your macOS System Settings and set the system input to the Aggregate Device, or configure the browser's microphone permissions to use it.
Test in a Zoom Call
Everything is wired up. Time to verify the full loop works end-to-end in an actual Zoom meeting.
- Start or join a Zoom meeting. You can create a test meeting with just yourself.
- Verify that your avatar video appears on camera via OBS Virtual Camera.
- Verify that when the avatar speaks, the audio comes through as your microphone in Zoom. You should see the microphone level indicator move in Zoom's audio settings.
- Verify that when someone speaks in Zoom, the audio routes through BlackHole to Sidekick, which transcribes the question and responds.
Video Not Showing in Zoom?
Make sure OBS Virtual Camera was started before you opened Zoom. If you started Zoom first, quit Zoom completely and reopen it. You can also try toggling Touch up my appearance in Zoom's video settings to force a camera refresh. Make sure you are running OBS version 28.0 or higher for native macOS virtual camera support.
Still stuck? Help me troubleshoot why OBS Virtual Camera is not appearing in Zoom on my Mac.
Avatar Not Hearing Zoom Audio?
If Sidekick is not responding to speech from Zoom, the audio is not reaching it through BlackHole. Double-check that Zoom's speaker is set to Multi-Output Device (not Built-In Output). Also confirm that your browser's microphone input is set to the Aggregate Device you created earlier.
Need more help? Help me debug BlackHole audio routing between Zoom and Sidekick on my Mac.
Your AI avatar is now live in Zoom, answering interview questions with lip-synced video and intelligent responses. You have built a complete pipeline from speech recognition to language model to voice synthesis to lip-sync video, all streaming into a real video call.
Secret mission
Clone Your Own Voice
Your avatar looks like you, but does it sound like you? Use ElevenLabs Instant Voice Cloning to give your avatar your real voice. Record a short audio sample, upload it, and swap out the stock voice for a clone that actually sounds like you on the Zoom call.
Before you go
Clean Up Your Resources
Decide whether to keep your resources running, pause them to come back later, or delete them entirely. This project uses free-tier API accounts and locally installed tools. The main ongoing costs come from API usage if you continue running conversations (Decart charges $0.01/sec for lip-sync generation).
Cost warning
Decart charges $0.01/sec for active lip-sync generation. A 5-minute conversation costs approximately $3. Your free credits will eventually run out if you leave the avatar running. ElevenLabs' free tier has a 10,000 credit monthly cap. Make sure to stop the Sidekick server when you are not actively using it.
Resources you used:
- Sidekick server (local Python process on port 8080).
- Python virtual environment (.venv inside the sidekick directory).
- Cloned sidekick repository (local files).
- Your avatar video file (videos/my_avatar.mp4).
- Your character YAML file (my_interview.yaml).
- Groq API account and key (free tier).
- ElevenLabs API account and key (free tier).
- Decart API account and key (free credits).
- OBS Studio (installed application).
- BlackHole 2ch (virtual audio driver).
- Multi-Output Device and Aggregate Device (Audio MIDI Setup configurations).
- OBS Virtual Camera scene and source configuration.
Keep everything running
No action needed. Choose this if you are still actively building or plan to use your avatar for upcoming interviews.
- Keep OBS Studio, BlackHole, and the Sidekick repo installed.
- Stop the Sidekick server when you are not actively using it to avoid consuming Decart credits. Press Ctrl+C in the Terminal where it is running.
- Monitor your free credit balances on Decart, ElevenLabs, and Groq dashboards periodically.
Pause - I'll come back to this later
Shut down running processes to free up memory and avoid consuming API credits. Your files and configurations will remain intact for when you return.
- Stop the Sidekick server by pressing Ctrl+C in Terminal.
- Stop OBS Virtual Camera by clicking Stop Virtual Camera in OBS, then close OBS.
- Deactivate your Python virtual environment by running deactivate in Terminal.
- Reset Zoom's camera back to your built-in webcam and microphone back to your built-in microphone in Settings > Video and Settings > Audio.
- Leave BlackHole, OBS, the Sidekick repo, and your .env file in place. You can restart everything later by activating the virtual environment and running the server command again.
Delete - I don't want to use this again
Remove all project resources and start fresh. This deletes local files and uninstalls tools you installed for this project.
- Stop the Sidekick server by pressing Ctrl+C in Terminal.
- Delete the Sidekick project folder (including your virtual environment, character YAML, and avatar video): rm -rf ~/path/to/sidekick.
- Uninstall BlackHole 2ch: brew uninstall blackhole-2ch.
- Remove the Multi-Output Device and Aggregate Device you created in Audio MIDI Setup. Open Audio MIDI Setup, select each device, and click the "-" button to delete it.
- Uninstall OBS Studio by dragging it from your Applications folder to the Trash.
- Reset Zoom's camera back to your built-in webcam and microphone back to your built-in microphone.
- Optionally, delete your API keys on Groq (console.groq.com), ElevenLabs (elevenlabs.io), and Decart (platform.decart.ai) if you do not plan to use them again.
- If you cloned your voice on ElevenLabs, you can delete the cloned voice from the Voices section in your ElevenLabs dashboard.
Mission accomplished
That's a Wrap!
Congratulations! You just built a real-time AI avatar of yourself that can attend Zoom interviews and answer questions with lip-synced video. That's four AI services wired together into a single conversational pipeline, piped straight into a live video call.
Here's what you learned:
- Built a multi-service AI pipeline connecting Whisper (STT), Groq (LLM), ElevenLabs (TTS), and Decart (lip-sync) into a real-time conversational avatar.
- Created a custom character YAML file that loads your resume, skills, and interview talking points as the system prompt for an LLM-powered avatar.
- Configured OBS Virtual Camera and BlackHole audio routing to pipe your AI avatar's video and audio bidirectionally into a live Zoom call.
- Cloned your own voice using ElevenLabs Instant Voice Cloning so the avatar truly sounds like you.
Ready to quiz yourself?