WhatsApp Video Skill
Create animated WhatsApp-style chat videos using Remotion. Perfect for X, TikTok, Instagram Reels.
by danpeg · published 2026-03-22
$ claw add gh:danpeg/danpeg-whatsapp-video-mockup# WhatsApp Video Skill
Create animated WhatsApp-style chat videos using Remotion. Perfect for X, TikTok, Instagram Reels.
Features
Default Settings
Prerequisites
This skill requires the **Remotion Best Practices** skill:
npx skills add remotion-dev/skills -a claude-code -y -gQuick Start
cd ~/Projects/remotion-testEdit the conversation in `src/WhatsAppVideo.tsx`, then render:
npx remotion render WhatsAppDemo out/my-video.mp4 --concurrency=4How to Create a New Video
1. Define Your Messages
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} />2. Timing Guide
**Typical flow:**
1. First message: `delay={20}` (~0.7s)
2. Typing indicator: `delay={80}`, `duration={45}`
3. Response: `delay={125}` (after typing ends)
4. Next typing: `delay={175}`, `duration={45}`
5. Next response: `delay={220}`
3. Adjust Scrolling
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.
4. Text Formatting
Messages support:
5. Customizing the Header
In `ChatHeader` component, change:
6. Update Duration
In `Root.tsx`, set `durationInFrames` to match your video length:
7. Render
# 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 devPlatform Dimensions
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 |
Project Structure
~/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 videosSound Effects
Sounds are triggered with Sequence:
<Sequence from={125}>
<Audio src={staticFile("sounds/pop.mp3")} volume={0.5} />
</Sequence>Tips
1. **Preview while editing**: Run `npm run dev` to see changes live
2. **Frame-by-frame**: Use timeline scrubber to check timing
3. **Keep messages concise**: Long messages may need scroll adjustment
4. **Test on mobile**: Check readability at actual size
Asking Pokey to Generate
Just describe the conversation:
Pokey will write the messages, set timing, render, and send the MP4.
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...