talking-avatar
Skill8 starsChanged 5 months agoMITView on GitHub
Make a person, portrait, or avatar talk on camera. Use when the user says "make this photo talk", "talking head video", "lip-sync this to my audio", "turn my script into a presenter", "avatar reads this text", "sync this video to a new voiceover", or wants a spokesperson, explainer, or presenter driven from a script or audio file. For a full creator-style ad built around the talking head, use ugc-ad. For only the spoken audio with no video, use voiceover.
2 other projects use a version of this.
Adopted by
Most recently taken up by
- mohammad-abbasi-sh/talking-avatartheir own version, first seen Nov 1, 2026
- buildfastwithai/gen-ai-experimentstheir own version, first seen Oct 8, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- buildfastwithai/gen-ai-experiments★ 790same name
- mohammad-abbasi-sh/talking-avatar★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository32 other files it gives its agents.
- add-audio-to-videoSkill
- animate-imageSkill
- bring-your-own-modelSkill
- character-consistencySkill
- cinematic-videoSkill
- composite-sceneSkill
- controlled-generationSkill
- dialogue-audioSkill
- edit-imageSkill
- edit-videoSkill
- game-assets-2dSkill
- image-to-3d-assetSkill
- llm-agentSkill
- logos-and-vectorsSkill
- multi-shot-videoSkill
- musicSkill
- photoreal-stillsSkill
- product-ad-videoSkill
- product-photographySkill
- reframe-videoSkill
- replace-in-videoSkill
- restore-and-upscaleSkill
- runware-modelsSkill
- runware-promptingSkill
- runware-runSkill
- text-in-imageSkill
- train-style-modelSkill
- ugc-adSkill
- video-upscaleSkill
- vision-understandingSkill
- voice-cloningSkill
- voiceoverSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 4 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 20
Refuse impersonation: Do not recreate or re-voice a real person, especially a public figure, without authorization, and refuse requests …
- Distinctive: line 23
When a request is ambiguous about who the person is or whether it is authorized, stop and ask rather than generate.
- Distinctive: line 29
Voice: if going the script route: which TTS voice reads it, plus optional target language.
- Very specific: line 100
If a background was replaced, removeBackground ran with a real replacement and the background aspect matches the canvas.
- Distinctive: line 101
No fabricated endorsements or on-screen claims.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Talking avatar
Drive a talking-head video from a still portrait or a registered avatar. Two ways in: write a script and let the model speak it (text-to-speech), or hand the model your own audio and it lip-syncs the face to it. The output is a video of someone delivering your words. Use this for presenters, explainers, spokespeople, and re-voicing footage. For a full ad or a standalone voice track, compose with the sibling skills below.
Consent and disclosure
This skill synthesizes a real person's face and voice, so gate on authorization before generating:
- Require ownership or consent. Confirm the user owns the portrait, footage, and voice, or has the subject's permission to use them. If that is unclear, ask before proceeding.
- Refuse impersonation. Do not recreate or re-voice a real person, especially a public figure, without authorization, and refuse requests aimed at deception, harassment, fraud, political manipulation, or non-consensual or sexual content.
- Disclose synthetic media. Recommend labeling AI-generated or altered video where it could be mistaken for real, and offer to burn in a disclosure caption when re-voicing existing footage.
When a request is ambiguous about who the person is or whether it is authorized, stop and ask rather than generate.
Inputs to collect
- The face. A portrait image of the person, or a registered avatar ID for catalog-based models. (Ask only if none provided.)
- The words. Either a script (you generate the voice) or an audio file (you supply the voice). One or the other, not both.
- Voice if going the script route: which TTS voice reads it, plus optional target language.
- Where it plays: orientation and resolution for the target platform (16:9 for web/YouTube, 9:16 for Reels/TikTok/Shorts).
- Optional: a background to composite behind the speaker, and whether to burn in captions.
Models
Confirm the live model + its schema via runware-models + runware-run before calling. Never hardcode a stale choice. All carry the io:audio-to-video capability.
Portrait / avatar driven (a still image or registered look becomes the speaker):
- HeyGen Avatar V (
heygen:avatar@5): registered-avatar presenter with the richest composition controls (background, framing, captions, multilingual TTS). Best general pick for a polished spokesperson. - OmniHuman-1.5 (
bytedance:5@2): image + audio, strong expressive full-body motion from a single portrait. - KlingAI Avatar 2.0 (
klingai:avatar@2.0-standard): expressive avatar video from image + audio.
Lip-sync onto existing footage (re-voice a person already on camera):
- sync-3 (
sync:3@0): full-scene lip sync with obstruction handling. Accepts a script or audio. - lipsync-2-pro (
sync:lipsync-2-pro@1): high-resolution diffusion lip-sync editing up to 4K. - PixVerse LipSync (
pixverse:lipsync@1): realistic lip sync from audio onto any reference video.
Workflow
These are video tasks, so they run asynchronously.
- Pick the model + path. Portrait/avatar to a talking head: HeyGen / OmniHuman / Kling. Re-syncing existing footage: sync-3 / lipsync-2-pro / PixVerse. Resolve the schema (
runware-run) and confirm the exactinputsfield names before calling. - Choose exactly one drive mode:
- TTS path: set
speech.text(the script) andspeech.voice. The model generates the voice. - Audio path: set
inputs.audio(a public URL or an uploaded asset UUID). The model extracts phonemes and animates the mouth to match. - Sending both errors. Not every model exposes
speech, so on those use the audio path.
- TTS path: set
- Provide the face. Upload the portrait into the image field (
inputs.image), pass a cataloginputs.avatarID where the model uses one, or for lip-sync pass the source footage (inputs.video/inputs.referenceVideos). - Compose for the platform (HeyGen): set
width/heightfor the orientation, optionallyinputs.background+settings.removeBackgroundto replace the scene,settings.fitto resolve aspect mismatch,settings.captionto burn in subtitles. - Run async and poll. Submit
videoInference, get ataskUUID, pollgetResponseuntil terminal. Read the result fromvideoURL.
Technique
- The face and the voice are independent. Pick the avatar/portrait and the voice separately. Lip sync adapts to whatever face you pair the audio with. A masculine voice on a feminine avatar will sync correctly but reads as a jarring mismatch, so pair them deliberately.
- TTS path for iterating on copy. Two requests with different
speech.textgive two videos in minutes, andspeech.languagelocalizes the same voice across locales (BCP 47 codes likeen-US,es-ES). This is the cheapest way to A/B copy or fan a script out across languages. Translate, don't transliterate. The language code alone won't fix awkward source copy. - Audio path for brand voices. When you already have the exact delivery (a recording, a voice clone, a separate TTS pass), feed it as
inputs.audioand let the lip sync wrap it. You give up the TTS tuning knobs on this path, so shape the voice upstream instead. - Lock the avatar and voice before iterating. Both are visible-in-the-output decisions. Test the pairing on a short 10-second script first, then send the full read once it feels right.
- Background and framing are where it reads as production. Most of the polish lives around the speaker, not in the face.
settings.removeBackgroundonly matters paired with a replacement (settings.backgroundColorhex, or an image ininputs.background). Alone it falls back to the source environment. Match the background image's aspect to the output canvas to avoid crop or letterbox. - Pick orientation before the look. A wide-framed avatar forced into a 9:16 canvas needs
fit: coverand still looks awkward. For mobile-first output, choose a look that frames vertically.coverfills and crops,containletterboxes, and omittingfitlets the server choose.
Fill this in before building the request:
Drive mode (pick ONE):
[ ] TTS -> speech.text = "<script>", speech.voice = "<voice ID>" (no inputs.audio)
[ ] Audio -> inputs.audio = "<URL or UUID>" (no speech block)
Face: avatar = "<catalog ID>" | portrait = "<image>" | lip-sync source video = "<video>"
Orientation + resolution: <16:9 or 9:16> @ <720p / 1080p / 4K>
Background: <none / backgroundColor #hex / inputs.background image> (+ removeBackground if replacing)
Fit: <cover / contain / omit> Captions: <on / off>For full worked requests covering each drive path, load references/examples.md.
Parameters that matter
- One of
speechorinputs.audio, never both.speech.text+speech.voiceare required together on the TTS path. speech.speed(HeyGen0.5to1.5, default1.0),speech.pitch(-50to+50, default0, keep adjustments small),speech.volume(0.0to1.0). TTS-path only.speech.language: a BCP 47 locale that adapts the voice's pronunciation to the target language.inputs.image(portrait),inputs.avatar(catalog ID, validated against an enum on avatar models),inputs.video/inputs.referenceVideos(lip-sync source),inputs.audio(URL or UUID).width/height: HeyGen outputs fixed 16:9 or 9:16 resolutions (720p / 1080p / 4K). 1080p is the production default, 720p for previews.settings.removeBackground,settings.backgroundColor,inputs.background,settings.fit(cover/contain),settings.caption: HeyGen composition controls. Burned-in captions are permanent and use a fixed style.- Confirm exact field names and ranges against the live schema (
runware-run). They vary across these models. Never guess.
Quality bar
- Lip sync tracks the audio cleanly, with no drift or mouth artifacts across the clip.
- Exactly one drive mode was sent (script or audio), so the request validated.
- Orientation and resolution match the destination platform, and
fitresolves any aspect mismatch without ugly letterboxing. - If a background was replaced,
removeBackgroundran with a real replacement and the background aspect matches the canvas. - No fabricated endorsements or on-screen claims. Only use copy the user supplied.
Related skills
runware-run, runware-models, runware-prompting; voiceover (generate or clone the audio you feed in), ugc-ad (wrap the talking head into a full ad), character-consistency (keep the same presenter across videos).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

