calesthio/tavus-replica-video
Use for producing Tavus AI-human videos and real-time avatar conversations with Tavus Faces/Replicas, PALs/Personas, async Video Generation, CVI conversations, consent-safe likeness workflows, webhooks, backgrounds, localization, and avatar QA.
npx skills add https://github.com/calesthio/generative-media-skills --skill tavus-replica-video
Use this skill when a task involves Tavus avatars, replicas, faces, PALs/personas, generated talking-head files, real-time conversational video agents, or Tavus-powered lip-synced presenter output.
Documented facts in this skill were checked against official Tavus docs, policies, and pricing on 2026-07-10. Treat API names, model names, plan limits, stock replica availability, language support, pricing, and policy wording as volatile; verify them again before committing spend, launch scope, or regulated workflows.
Tavus docs now use:
Legacy terms still appear in APIs and production requests:
replica_id in the Video Generation API is the Face ID returned by /v2/faces./v2/personas, persona_id, /v2/replicas, default_replica_id, and related aliases may still exist for backward compatibility.Do not force the user to rename their mental model. Translate cleanly: "your Tavus replica ID is the face ID needed by the video endpoint."
Pick the path by deliverable, not by habit.
POST /v2/videos with replica_id plus either script or audio_url; poll GET /v2/videos/{video_id} until ready, then capture download_url, stream_url, and hosted_url.POST /v2/conversations with face_id and pal_id.POST /v2/faces. Use video training for highest fidelity and customer-facing work; use image training when speed/setup simplicity matters more than personalized expressions.audio_url rather than script, or use CVI echo mode when the app supplies utterances in real time.audio_url or choose another documented lip-sync provider.Before any custom face, likeness, voice, or biometric material is uploaded, require evidence that the depicted person has granted explicit, informed consent for:
Reject or pause when consent is absent, ambiguous, expired, or outside scope. Do not create replicas of real people, public figures, employees, customers, minors, or private individuals without explicit consent. Do not use Tavus stock replicas in ways that imply the actor personally endorses opinions, conditions, identity attributes, political positions, fundraising, news, or sensitive current-event claims unless Tavus has provided the required permission. Clearly disclose to end users when they are interacting with AI-generated content or an AI-powered agent.
Tavus policy and privacy notes to carry into production:
Use Face creation when the user needs their own presenter, a branded character, or a consented person rather than a stock face.
Documented facts, verified 2026-07-10:
POST https://tavusapi.com/v2/facestrain_video_urltrain_image_url in the same request.phoenix-4; phoenix-3 can be requested with model_name when needed.Production heuristic:
Example API skeleton:
{
"face_name": "consented-founder-presenter",
"train_video_url": "https://example-bucket.s3.amazonaws.com/founder-training.mp4?...",
"callback_url": "https://example.com/tavus/webhook",
"model_name": "phoenix-4"
}
Documented facts, verified 2026-07-10:
POST /v2/facestrain_image_urlvoice_name is required when train_image_url is used.train_video_url in the same request.auto_fix_training_image option for image-based training.Production heuristic:
voice_name is available with Tavus's current voice list and is approved for the character/persona.Use async Video Generation when the desired artifact is a finished video file for sharing, embedding, ads, outbound sales, enablement, product support, or localization variants.
Documented facts, verified 2026-07-10:
POST https://tavusapi.com/v2/videosreplica_id and either script or audio_url.replica_id is the Face ID, even though the endpoint still uses the legacy field name.video_name, callback_url, background_url, background_source_url, fast, transparent_background, watermark_image_url, and properties.background_url records a public website as the background.background_source_url uses a public downloadable video as the background.transparent_background: true only works with fast: true and produces .webm.fast: true uses a faster barebones rendering process and disables some features such as background generation, thumbnail images, and streaming URLs.GET /v2/videos/{video_id} include queued, generating, ready, deleted, and error.API skeleton from text:
{
"replica_id": "r90bbd427f71",
"script": "Hi Maya, I reviewed your onboarding workflow and saw three places where we can remove manual follow-up...",
"video_name": "maya-onboarding-followup",
"background_url": "https://example.com/product",
"callback_url": "https://example.com/tavus/video-webhook"
}
API skeleton from approved audio:
{
"replica_id": "r90bbd427f71",
"audio_url": "https://example-bucket.s3.amazonaws.com/approved-es-mx-voiceover.wav?...",
"video_name": "support-intro-es-mx",
"background_source_url": "https://example-bucket.s3.amazonaws.com/product-loop.mp4?..."
}
These are production heuristics, not Tavus API requirements.
Use CVI when the avatar must listen, see, respond, remember, coach, support, interview, qualify, or interact in a live room.
Documented facts, verified 2026-07-10:
POST /v2/pals creates a PAL that configures CVI behavior.default_face_id is required on POST /v2/pals.system_prompt is required unless using echo mode.pipeline_mode can be full or echo.full provides the default end-to-end experience.echo turns off most steps and lets the PAL sync video with audio/text passed through Echo events.POST /v2/conversations starts a real-time video conversation with face_id and pal_id.callback_url, conversation_name, conversational_context, custom_greeting, memory_stores, document_ids, document_tags, document_retrieval_strategy, test_mode, meeting_url, require_auth, and max_participants.test_mode: true creates the conversation without the PAL joining and avoids affecting concurrency limits, according to Tavus docs.Production heuristics for PAL authoring:
require_auth and meeting tokens for private rooms.Example PAL planning payload:
{
"pal_name": "returns-support-pal",
"pipeline_mode": "full",
"default_face_id": "r90bbd427f71",
"system_prompt": "You are a calm retail returns specialist. Help customers understand return eligibility, collect only the minimum needed order context, never promise refunds outside policy, and escalate billing disputes to a human agent.",
"document_tags": ["returns_policy", "shipping_policy"],
"guardrail_tags": ["customer_support_safety"]
}
Example conversation payload:
{
"face_id": "r90bbd427f71",
"pal_id": "pcb7a34da5fe",
"conversation_name": "returns-support-demo",
"custom_greeting": "Hi, I can help you check return options. What did you order?",
"callback_url": "https://example.com/tavus/conversation-webhook",
"require_auth": true,
"max_participants": 2
}
Always design a lifecycle plan before running production jobs.
For async videos:
video_id, video_name, replica_id/Face ID, script or audio URL, background URL, created/updated timestamps, status, progress, download_url, hosted_url, stream_url, status details, and callback payloads.callback_url events. Do not block forever on generating.status is ready, download and archive the file under the project's asset custody rules; Tavus-hosted links are convenient delivery links, not your only archive.status is error, capture status_details, classify as auth, invalid ID, inaccessible URL, media format, provider error, policy/safety, or transient backend failure before retrying.For face training:
face_id, face_name, model name, training path, callback payloads, and final status.For CVI:
Run QA on both the media and the governance record.
.webm was requested only with fast: true.event_type, message_type, retries, duplicate events, and missing optional fields.x-api-key.replica_id / face_id: confirm whether the endpoint wants legacy replica_id or current face_id; verify the ID exists under the active Tavus account.video_id and payload rather than repeatedly submitting duplicates.background_source_url, not background_url.script to approved audio_url, shorten sentences, or use voice/pronunciation features where available.test_mode, and whether a valid PAL/default Face is configured.Example production intent: create short, consent-safe, personalized sales videos from an approved Tavus stock or company-owned Face.
Approach:
background_url only if it is stable and safe to capture.Example script:
> Hi Jordan - I saw your team is hiring onboarding specialists, which usually means your customer handoffs are getting more complex. Acme Flow can turn each kickoff into a guided checklist, so your team spends less time chasing updates and more time helping customers launch. If you want, I can send over a two-minute walkthrough built around your onboarding page.
Example request:
{
"replica_id": "r90bbd427f71",
"script": "Hi Jordan - I saw your team is hiring onboarding specialists, which usually means your customer handoffs are getting more complex. Acme Flow can turn each kickoff into a guided checklist, so your team spends less time chasing updates and more time helping customers launch. If you want, I can send over a two-minute walkthrough built around your onboarding page.",
"video_name": "jordan-acme-flow-outbound-pilot",
"background_url": "https://example.com/onboarding",
"callback_url": "https://example.com/webhooks/tavus-video"
}
QA focus:
Example production intent: deploy an AI human that answers basic support questions and hands off uncertain cases.
Approach:
test_mode: true for payload validation, then a real private room for QA.Example PAL prompt:
> You are Nova, a customer support PAL for Acme Flow. Your job is to help users understand onboarding checklists, integrations, and billing-plan boundaries. Use only the attached knowledge documents for factual product claims. If the customer asks for legal advice, refunds outside policy, account deletion, security incidents, or anything involving personal data you cannot verify, explain that a human specialist must help and offer to create a support ticket. Keep answers under 90 words unless the user asks for detail.
Example conversation context:
{
"face_id": "r90bbd427f71",
"pal_id": "pcb7a34da5fe",
"conversation_name": "support-qa-session-001",
"conversational_context": "The user is testing whether Acme Flow supports Slack notifications for onboarding checklist changes.",
"custom_greeting": "Hi, I'm Nova. I can help with Acme Flow onboarding questions. What would you like to check?",
"require_auth": true,
"max_participants": 2,
"callback_url": "https://example.com/webhooks/tavus-cvi"
}
QA focus:
Example production intent: create Spanish and French versions of a founder explainer with exact reviewed translations and voice delivery.
Approach:
audio_url with the async Video API for each locale.Example request:
{
"replica_id": "r90bbd427f71",
"audio_url": "https://example-bucket.s3.amazonaws.com/founder-explainer-es-mx-approved.wav?...",
"video_name": "founder-explainer-es-mx-v1",
"background_source_url": "https://example-bucket.s3.amazonaws.com/product-loop-16x9.mp4?...",
"callback_url": "https://example.com/webhooks/tavus-video"
}
QA focus:
Official/authoritative sources used for documented claims:
Take calesthio/tavus-replica-video from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.