Tweet to Talking-Head

v1.0.0

Turn an X/Twitter/LinkedIn post (URL or pasted thread text) into a talking-head video that delivers the take. Use when a creator wants to repurpose a viral p...

0· 50· 1 versions· 0 current· 0 all-time· Updated 2d ago· MIT-0

Tweet / X / LinkedIn post → talking-head video

Take a single post or a thread and produce a 20–45 s talking-head video where an avatar reads the take.

When to use this skill

  • Source is a tweet URL, X thread URL, LinkedIn post URL, or pasted thread text.
  • Output is a talking-head delivering the post (avatar + voiceover + captions + minimal background motion).
  • For an edited summary with stock visuals of an article, use revid-article-to-short instead.

Inputs

FieldRequiredNotes
text or urlyesEither the pasted thread (preferred — no scraping) or the post URL.
avatar.url or characterIds[]yesThe face.
aspectRationoDefault 9:16
targetDurationnoDefault 30 (s)

Step-by-step

  1. If you have the tweet/thread text, prefer script-to-video (no scraping risk — many social platforms block bots).
  2. If you only have a URL, use article-to-video with a tight scrapingPrompt.
  3. Either way, attach the avatar block + a single characterId.
  4. POST /render.
  5. Poll /status.

API call template — pasted thread (preferred)

POST /api/public/v3/render
Host: www.revid.ai
Content-Type: application/json
key: $REVID_API_KEY
{
  "workflow": "script-to-video",
  "source": {
    "text": "{TWEET_OR_THREAD_TEXT}"
  },
  "aspectRatio": "9:16",
  "avatar": {
    "enabled": true,
    "url": "{AVATAR_IMAGE_URL}",
    "removeBackground": true
  },
  "voice":    { "enabled": true, "voiceId": "aria-en-us", "stability": 0.65, "speed": 1.05 },
  "captions": { "enabled": true, "position": "middle", "autoCrop": true },
  "music":    { "enabled": false },
  "media": {
    "type": "moving-image",
    "density": "low",
    "animation": "soft",
    "placeAvatarInContext": true
  },
  "options": {
    "targetDuration": 30,
    "summarizationPreference": "no-summarization",
    "hasToGenerateCover": true,
    "coverTextType": "first-line"
  },
  "render": { "resolution": "1080p", "frameRate": 30 }
}

summarizationPreference: "no-summarization" — for tweets, the original phrasing IS the value. Don't paraphrase.

API call template — URL (fallback)

{
  "workflow": "article-to-video",
  "source": {
    "url": "{POST_URL}",
    "scrapingPrompt": "Extract only the original post text and the thread author. Ignore replies, reposts, and side panels."
  },
  "aspectRatio": "9:16",
  "avatar": { "enabled": true, "url": "{AVATAR_IMAGE_URL}", "removeBackground": true },
  "voice":   { "enabled": true, "voiceId": "aria-en-us", "stability": 0.65 },
  "captions":{ "enabled": true, "position": "middle" },
  "music":   { "enabled": false },
  "media":   { "type": "moving-image", "density": "low", "animation": "soft" },
  "options": { "targetDuration": 30, "summarizationPreference": "summarizeIfLong" },
  "render":  { "resolution": "1080p" }
}

Examples

Failure modes

SymptomFix
scrape failed on URL formSwitch to the pasted-thread template — copy the post body into source.text.
Lip-sync drifts on multi-tweet threadLower targetDuration to 25 s, or set summarizationPreference: "summarize".
Avatar reads in the wrong toneSet voice.voiceId explicitly to a voice that matches the persona; default voice is rarely right for personality-driven content.
Tweet contains URLs / @mentions / hashtagsThe voice will read them aloud awkwardly. Pre-clean the text: strip raw URLs, replace @handle with the person's name, and remove standalone hashtags (or keep one as a sign-off).

See also

Version tags

latestvk971zeftdk54awn6a5vnsdhx0x85j51b

Runtime requirements

ConfigREVID_API_KEY