Install
openclaw skills install whatsapp-video-mockupCreate animated WhatsApp chat videos with realistic iPhone, dark mode UI, typing indicators, read receipts, and auto-scrolling for social media formats.
openclaw skills install whatsapp-video-mockupCreate animated WhatsApp-style chat videos using Remotion. Perfect for X, TikTok, Instagram Reels.
code formatting supportThis skill requires the Remotion Best Practices skill:
npx skills add remotion-dev/skills -a claude-code -y -g
cd ~/Projects/remotion-test
Edit the conversation in src/WhatsAppVideo.tsx, then render:
npx remotion render WhatsAppDemo out/my-video.mp4 --concurrency=4
Edit the ChatMessages component in src/WhatsAppVideo.tsx:
// Incoming message (from assistant)
<Message
text="Your message text here"
isOutgoing={false}
time="8:40 AM"
delay={125} // Frame when message appears (30fps)
/>
// Outgoing message (from user)
<Message
text="Your outgoing message"
isOutgoing={true}
time="8:41 AM"
delay={200}
showCheck={true}
/>
// Typing indicator (shows "..." bubbles)
<TypingIndicator delay={80} duration={45} />
delay={30} = appears at 1 seconddelay={60} = appears at 2 secondsduration={45} = lasts 1.5 secondsTypical flow:
delay={20} (~0.7s)delay={80}, duration={45}delay={125} (after typing ends)delay={175}, duration={45}delay={220}In ChatMessages, update the scroll interpolation based on your message count:
const scrollAmount = interpolate(
frame,
[scrollStart, scrollStart + 60, messageFrame, lastFrame],
[0, firstScroll, firstScroll, finalScroll],
{ extrapolateLeft: "clamp", extrapolateRight: "clamp" }
);
Increase scroll values if messages overflow.
Messages support:
**bold text**Code: backticks around text\n in the stringIn ChatHeader component, change:
Pokey 🐡 → your assistant nameonlineIn Root.tsx, set durationInFrames to match your video length:
# Standard render
npx remotion render WhatsAppDemo out/video.mp4 --concurrency=4
# Higher quality
npx remotion render WhatsAppDemo out/video.mp4 --codec h264 --crf 18
# Preview in browser
npm run dev
Edit Root.tsx to change dimensions:
| Platform | Dimensions | Aspect Ratio | Use Case |
|---|---|---|---|
| X/Instagram feed | 1080×1350 | 4:5 | Default, most visible |
| X/TikTok/Reels | 1080×1920 | 9:16 | Full vertical |
| X square | 1080×1080 | 1:1 | Universal |
| YouTube/X landscape | 1920×1080 | 16:9 | Horizontal |
~/Projects/remotion-test/
├── src/
│ ├── WhatsAppVideo.tsx # Main video component
│ └── Root.tsx # Composition config
├── public/
│ └── sounds/
│ ├── pop.mp3 # Message received
│ └── send.mp3 # Message sent
└── out/ # Rendered videos
Sounds are triggered with Sequence:
<Sequence from={125}>
<Audio src={staticFile("sounds/pop.mp3")} volume={0.5} />
</Sequence>
npm run dev to see changes liveJust describe the conversation:
Pokey will write the messages, set timing, render, and send the MP4.