Send Video Message
Send the user a video message where an AI avatar speaks your words — lip-synced with natural motion. Use this for async updates, code review walkthroughs, incident summaries, or anything that's better explained with a face than a wall of text.
Privacy & Data Handling
- - Runway API: Only data you explicitly pass (spoken text, avatar image) is sent to Runway (dev.runwayml.com). Nothing is uploaded automatically. Custom avatars can be deleted anytime via
DELETE /v1/avatars/{id}. - Output: Generated videos are saved to
/tmp and sent via MEDIA: for OpenClaw to auto-attach.
Setup
Get a Runway API Key
- 1. Go to dev.runwayml.com
- Create an account and get an API key
- Set it: INLINECODE3
One-Time Setup: Create Your Avatar
Before generating videos, create a custom avatar (face image + Runway). You only need to do this once — the avatar ID is saved and reused for all future videos.
The voice is chosen later in generate_video.py, not at avatar creation.
Which face to use — follow this order
- 1. Default (no user preference): Use Openclaw Lobster 2 as
referenceImage via setup_avatar.py --image-url (URL below). Do not use Runway’s built-in preset avatars (game-character, cat-character, etc.) as the first choice — those are only for the fallback in step 3. - User asked for a look: Pick another image from the list below, use an image URL they gave you, or run
setup_avatar.py --description "..." to generate a face from text (slower; uses Runway text-to-image). - Fallback — urgent or you’re out of time: Skip
setup_avatar and call generate_video.py with --preset-id "game-character" (or another Runway preset ID from the fallback list below). Faster, less distinctive than Lobster / list images.
Check first: If ~/.openclaw/runway-avatar.json already has an avatar_id (or you know one from a prior run), reuse it and skip to Generate a Video Message.
Step 1: Pick a face image (for custom avatar)
Use Openclaw Lobster 2 unless the user wants something else from this list (or their own URL):
- - Openclaw Lobster 2 (default): INLINECODE15
- Openclaw Lobster 1: INLINECODE16
- Cat: INLINECODE17
- Alien man, candy texture: INLINECODE18
- Alien woman, candy texture: INLINECODE19
- Old man, long beard, game style: INLINECODE20
- Blond guy, blue sweater: INLINECODE21
- Man, 3D animation: INLINECODE22
- Girl in airport, 3D: INLINECODE23
- White furry monster: INLINECODE24
- Superstar young woman: INLINECODE25
Generate from text (when the user asks for a custom look and no URL fits) — setup_avatar.py --description "...". The image should be a character facing the camera directly, head and shoulders, centered. Be bold and creative:
- - Warm / friendly → soft 3D animation, Pixar-style, watercolor
- Sharp / professional → clean illustration, stylized portrait, low-poly
- Chaotic / playful → candy texture, claymation, puppet, pop art
- Cute / wholesome → chibi, plush toy, animal character, kawaii
Step 2: Create the avatar
Default — Openclaw Lobster 2:
CODEBLOCK0
Another character from the list above — same command as Lobster 2, only change --image-url to that preset’s URL.
Text description (generates the image) — when the user wants a custom generated look:
CODEBLOCK1
With your own image URL:
CODEBLOCK2
The setup script prints the avatar ID and saves it to ~/.openclaw/runway-avatar.json. Future generate_video.py calls use it automatically. Save the avatar ID — reuse it for all videos. Do NOT create a new avatar each time.
Generate a Video Message
Write what you want to say, pick a voice that matches your avatar image, and the avatar will speak it with lip-synced animation. Always pass --voice — choose one that fits the character's appearance (e.g. a female avatar should use a female voice, an authoritative-looking character should use a deeper voice).
CODEBLOCK3
Do not pass --preset-id when a custom avatar is already saved or you pass --avatar-id — that is the normal path after Lobster 2 / list / text setup.
Cropping for mobile & Telegram
Runway’s avatar video is wide (16:9). On phones that can look squished or awkward. Crop it to match the target app:
| Target | Flag | Resolution | Ratio |
|---|
| Telegram | INLINECODE33 | 1080×1080 | 1:1 |
| Other mobile (WhatsApp, iMessage, etc.) |
--vertical | 1080×1920 | 9:16 |
Both flags scale the frame up to cover the target area, then center-crop. They are mutually exclusive — pick one. Env vars work too: SEND_VIDEO_MESSAGE_SQUARE=1 or SEND_VIDEO_MESSAGE_VERTICAL=1.
Requires ffmpeg on the machine that runs the script (brew install ffmpeg on macOS).
Telegram (square):
CODEBLOCK4
WhatsApp / iMessage / other mobile (vertical):
CODEBLOCK5
Available TTS voices
Pass --voice <name> to generate_video.py (default: Maya):
| ID | Gender | Style | Pitch |
|---|
| INLINECODE42 | Woman | Upbeat | Higher |
| INLINECODE43 |
Man | Clear | Middle |
|
Serene | Woman | Calm | Middle |
|
Bernard | Man | Authoritative | Lower |
|
Billy | Man | Casual | Middle |
|
Mark | Man | Neutral | Middle |
|
Clint | Man | Gravelly | Lower |
|
Mabel | Woman | Warm | Middle |
|
Chad | Man | Energetic | Middle |
|
Leslie | Woman | Friendly | Middle |
|
Eleanor | Woman | Mature | Middle |
|
Elias | Man | Smooth | Lower-middle |
|
Elliot | Man | Even | Middle |
|
Noah | Man | Relaxed | Lower-middle |
|
Rachel | Woman | Clear | Middle |
|
James | Man | Firm | Lower |
|
Katie | Woman | Bright | Higher |
|
Tom | Man | Casual | Middle |
|
Wanda | Woman | Warm | Middle |
|
Benjamin | Man | Professional | Lower-middle |
With a specific avatar ID (overrides saved default; still no --preset-id):
CODEBLOCK6
Fallback — Runway preset avatar (only if no time)
Use only when you cannot run setup_avatar (deadline, user waiting, etc.). Prefer game-character as the preset. No Lobster / list image — Runway’s generic character.
CODEBLOCK7
Other preset IDs if needed: game-character-man, music-superstar, cat-character, influencer, tennis-coach, human-resource, fashion-designer, INLINECODE72
Script output
The script outputs:
- 1. Progress updates as it generates speech and video
- INLINECODE73
- INLINECODE74 — OpenClaw auto-attaches this to the user's chat
Do not read the video file back — just report the path and let OpenClaw handle delivery.
When to Use Video Messages
Use video messages for async communication that benefits from a face:
- - Deploy updates: "Your deploy went through, here's what changed"
- Code review feedback: Walk through a PR with visual explanation
- Incident summaries: Recap what happened and what was fixed
- Progress updates: End-of-day or weekly recap
- Onboarding: Explain a codebase concept or architecture decision
- Celebrations: "Your PR just hit 1000 users — nice work!"
Use a video call (not a video message) for things that need real-time back-and-forth.
Complete Example: Deploy Notification
- 1. Agent detects a successful deploy
- If no saved avatar: runs
setup_avatar.py with Openclaw Lobster 2 --image-url (one-time) - Agent composes what to say: "Hey Alex — deploy went through. 3 PRs merged: the auth refactor, the cart fix, and your memory optimization. All tests green. P99 latency dropped 40 percent after your fix. Nice work."
- Generates the video with the saved custom avatar (no
--preset-id). Add --square for Telegram or --vertical for other mobile:
uv run {baseDir}/scripts/generate_video.py --text "Hey Alex — deploy went through..." --voice "Maya" --square
-
If you skipped avatar setup (out of time): use
--preset-id "game-character" instead (no custom avatar).
- 5. Sends the video to the user with a text summary:
> Your deploy just went through. Here's a quick video recap:
> [attached video]
Notes
- - Avatar priority: Custom avatar (Lobster 2 by default → list / user URL → text-generated) first; Runway
game-character preset only as a time-saving fallback. - Video generation takes 10-60 seconds depending on text length.
- Maximum text length is ~300 seconds of speech (~5 minutes).
- The
MEDIA: output line tells OpenClaw to auto-attach the video file. - Videos are saved to
/tmp — they persist until the system clears temp files. --square and --vertical need ffmpeg; without it, omit both and send the wide Runway file as-is.
发送视频消息
向用户发送一条视频消息,其中AI虚拟形象会说出您的话语——口型与自然动作同步。适用于异步更新、代码审查讲解、事件总结,或任何用面孔比文字墙更能解释清楚的内容。
隐私与数据处理
- - Runway API:仅您明确传递的数据(口述文本、虚拟形象图片)会发送至Runway(dev.runwayml.com)。不会自动上传任何内容。自定义虚拟形象可随时通过DELETE /v1/avatars/{id}删除。
- 输出:生成的视频保存至/tmp,并通过MEDIA:发送供OpenClaw自动附加。
设置
获取Runway API密钥
- 1. 访问dev.runwayml.com
- 创建账户并获取API密钥
- 设置密钥:export RUNWAYAPISECRET=yourkey
一次性设置:创建您的虚拟形象
在生成视频之前,先创建一个自定义虚拟形象(面部图像 + Runway)。您只需执行此操作一次——虚拟形象ID将被保存并用于所有后续视频。
语音在后续的generate_video.py中选择,而非在虚拟形象创建时。
使用哪张面孔——按此顺序操作
- 1. 默认(无用户偏好): 使用Openclaw Lobster 2作为referenceImage,通过setupavatar.py --image-url(URL如下)操作。不要优先使用Runway内置预设虚拟形象(game-character、cat-character等)——这些仅用于第3步的备用方案。
- 用户要求特定外观: 从下方列表中选择另一张图片,使用用户提供的图片URL,或运行setupavatar.py --description ...以从文本生成面部图像(较慢;使用Runway文本转图像)。
- 备用方案——紧急或时间不足: 跳过setupavatar,直接调用带--preset-id game-character(或下方备用列表中的其他Runway预设ID)的generatevideo.py。速度更快,但不如Lobster/列表图片有特色。
先检查: 如果~/.openclaw/runway-avatar.json已有avatar_id(或您知道之前运行过的ID),重复使用它并跳至生成视频消息。
第1步:选择面部图像(用于自定义虚拟形象)
除非用户想要此列表中的其他内容(或他们自己的URL),否则使用Openclaw Lobster 2:
- - Openclaw Lobster 2(默认):https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/openclaw-lobster2.jpg
- Openclaw Lobster 1:https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/openclaw-lobster1.jpg
- 猫:https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/cat.png
- 糖果质感外星男:https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/alien-man-candy-texture.jpg
- 糖果质感外星女:https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/alien-woman-candy-texture.jpg
- 游戏风格长须老人:https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/old-man-long-beard-game-style.png
- 蓝毛衣金发男:https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/blond-guy-blue-sweater.png
- 3D动画风格男:https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/man-3d-animation-style.png
- 机场3D女孩:https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/3d-animated-girl-in-airport.png
- 白色毛茸茸怪物:https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/white-furry-monster.png
- 超级巨星年轻女性:https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/woman-music-superstar.png
从文本生成(当用户要求自定义外观且没有合适的URL时)——setup_avatar.py --description ...。图像应为角色正面直视镜头,头部和肩部,居中。大胆且富有创意:
- - 温暖/友好 → 柔和3D动画,皮克斯风格,水彩
- 锐利/专业 → 清晰插画,风格化肖像,低多边形
- 混乱/俏皮 → 糖果质感,黏土动画,木偶,波普艺术
- 可爱/温馨 → Q版,毛绒玩具,动物角色,卡哇伊
第2步:创建虚拟形象
默认——Openclaw Lobster 2:
bash
uv run {baseDir}/scripts/setup_avatar.py \
--name Mochi \
--image-url https://runway-static-assets.s3.us-east-1.amazonaws.com/calliope-demo/agent-avatars-presets/openclaw-lobster2.jpg
上方列表中的其他角色——与Lobster 2相同的命令,只需将--image-url改为该预设的URL。
文本描述(生成图像)——当用户想要自定义生成的外观时:
bash
uv run {baseDir}/scripts/setup_avatar.py \
--name Mochi \
--description 一个可爱的毛茸茸白色卡通生物,有着大大的富有表现力的眼睛,直视观众,3D动画风格,头部和肩部,中性背景
使用您自己的图片URL:
bash
uv run {baseDir}/scripts/setup_avatar.py \
--name Mochi \
--image-url https://example.com/avatar.jpg
设置脚本会打印虚拟形象ID并将其保存至~/.openclaw/runway-avatar.json。后续的generate_video.py调用会自动使用它。保存虚拟形象ID——在所有视频中重复使用。不要每次都创建新虚拟形象。
生成视频消息
写下您想说的内容,选择与虚拟形象图像匹配的语音,虚拟形象将以口型同步动画说出它。始终传递--voice——选择适合角色外观的语音(例如,女性虚拟形象应使用女性语音,权威角色应使用较深沉的语音)。
bash
uv run {baseDir}/scripts/generate_video.py \
--text 嘿Alex——关于部署的快速更新。一切顺利,所有测试通过。你PR中的内存修复将p99延迟降低了40%。干得好。 \
--voice Maya
当自定义虚拟形象已保存或您传递了--avatar-id时,不要传递--preset-id——这是在Lobster 2/列表/文本设置后的正常路径。
为移动端和Telegram裁剪
Runway的虚拟形象视频是宽屏(16:9)。在手机上可能看起来被压扁或别扭。裁剪以匹配目标应用:
| 目标 | 标志 | 分辨率 | 比例 |
|---|
| Telegram | --square | 1080×1080 | 1:1 |
| 其他移动端(WhatsApp、iMessage等) |
--vertical | 1080×1920 | 9:16 |
两个标志都将帧放大以覆盖目标区域,然后居中裁剪。它们互斥——选择一个。环境变量也可用:SENDVIDEOMESSAGESQUARE=1或SENDVIDEOMESSAGEVERTICAL=1。
需要运行脚本的机器上安装ffmpeg(macOS上使用brew install ffmpeg)。
Telegram(正方形):
bash
uv run {baseDir}/scripts/generate_video.py \
--text 快速更新——部署正常,所有测试通过。 \
--voice Maya \
--square
WhatsApp / iMessage / 其他移动端(竖屏):
bash
uv run {baseDir}/scripts/generate_video.py \
--text 快速更新——部署