360 Secure SkillHub
360 安全技能中心

Blog to Avatar Video

该 Skill 调用 Revid API,抓取博客正文并摘要为脚本,再由指定头像与语音生成竖版或方形口播视频,支持角色 ID 复用、字幕、背景合成和状态轮询。

api00
api00
热度 35.87
最近更新 2026-05-11 17:45:58
分类:创作依赖:第三方 API / 代码执行应用场景:视频编辑 / 社交媒体 / 摘要总结 / API 集成

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add revid-blog-to-avatar-video
Metadata
name
revid-blog-to-avatar-video
description
Turn a blog post URL into a talking-head avatar video — the avatar reads a summarized script of the post against a clean background. Use when the user wants a personal/expert delivery vs an edited promo.
metadata
{"openclaw":{"requires":{"config":["REVID_API_KEY"]}}}

Blog post → talking-head avatar video

Take any blog/article URL and produce a vertical (or square) talking-head video with a chosen avatar reading a summarized version of the post.

When to use this skill

  • Source is a blog post / opinion piece / explainer with substantial body text.
  • Output should feel like a person delivering the take, not an edited promo with stock b-roll.
  • An avatar (image URL or characterId) is available, or the user accepts the default avatar.
  • For an edited short with stock visuals, use revid-article-to-short instead.

Inputs

Field Required Notes
url yes Blog post URL
avatar.url or characterIds[] yes The face. Either an image URL or a saved consistent character ID (see character mgmt).
aspectRatio no Default 9:16. Use 1:1 for LinkedIn.
voiceId no Match it to the avatar's tone if known.
targetDuration no Default 60 (s) — talking heads can run longer.

Step-by-step

  1. Validate the URL.
  2. If the user gave an avatar image URL, set avatar.url. If they gave a saved character ID, set characterIds: [id] (and leave avatar omitted).
  3. POST the payload below.
  4. Poll /status (canonical loop in the Polling section below).
  5. Return videoUrl.

API call template

POST /api/public/v3/render
Host: www.revid.ai
Content-Type: application/json
key: $REVID_API_KEY
{
  "workflow": "article-to-video",
  "source": {
    "url": "{BLOG_URL}",
    "scrapingPrompt": "Extract the article body. Skip header, navigation, related posts, and footer."
  },
  "aspectRatio": "9:16",
  "avatar": {
    "enabled": true,
    "url": "{AVATAR_IMAGE_URL}",
    "removeBackground": true,
    "imageModel": "good"
  },
  "voice": {
    "enabled": true,
    "voiceId": "aria-en-us",
    "stability": 0.65,
    "speed": 1.0,
    "language": "en-US",
    "enhanceAudio": true
  },
  "captions": { "enabled": true, "position": "bottom", "autoCrop": true },
  "music":    { "enabled": false },
  "media": {
    "type": "moving-image",
    "density": "low",
    "animation": "soft",
    "placeAvatarInContext": true
  },
  "options": {
    "targetDuration": 60,
    "summarizationPreference": "summarize",
    "hasToGenerateCover": true
  },
  "render": { "resolution": "1080p", "frameRate": 30 }
}

Notes:

  • placeAvatarInContext: true composites the avatar over a relevant background (vs a plain green-screen feel).
  • media.density: "low" keeps cuts minimal so the talking head can carry the video.
  • music.enabled: false is the default — voice-driven content reads better without competing audio.

Consistent characters

If the user wants the same face across many posts, create a character once and reuse the ID:

# 1. Create character
curl -s https://www.revid.ai/api/public/v3/consistent-characters \
  -H "Content-Type: application/json" \
  -H "key: $REVID_API_KEY" \
  -d '{ "name": "Maya", "imageUrl": "https://cdn.example.com/maya.jpg" }'
# → { "id": "ch_…" }

# 2. Use it in renders
{ "characterIds": ["ch_…"], "avatar": { "enabled": true } }

List existing characters with GET /api/public/v3/consistent-characters.

Examples

Polling

After POST /render, poll until status === "ready":

PID="<pid-from-render>"
while :; do
  R=$(curl -fsSL "https://www.revid.ai/api/public/v3/status?pid=$PID" \
        -H "key: $REVID_API_KEY")
  S=$(echo "$R" | jq -r .status)
  case "$S" in
    ready)  echo "$R" | jq .; break ;;
    failed) echo "FAILED: $R"; exit 1 ;;
    *)      sleep 5 ;;
  esac
done

In production prefer setting webhookUrl in the request body and skip polling.

Failure modes

Symptom Fix
Avatar lip-sync drifts on long copy Lower targetDuration to 45 s, or switch summarizationPreference: "summarize" (already on).
Avatar background bleeds into video Set avatar.removeBackground: true (default). For stubborn cases, pre-process the avatar image to a transparent PNG.
Background visuals distract from face media.density: "low" and media.animation: "soft" (already on). For pure plain background, set media.type: "custom" + media.useOnlyProvided: true with a single neutral asset.
Voice doesn't match the avatar Set voice.voiceId explicitly. The default voice is gendered female English — always override for other languages or personas.
scrape failed Same as in revid-article-to-short: pre-scrape the post and switch to script-to-video with the avatar block intact.

See also