install
source · Clone the upstream repo
git clone https://github.com/sundial-org/awesome-openclaw-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/whatsapp-video-mockup" ~/.claude/skills/sundial-org-awesome-openclaw-skills-whatsapp-video-mockup && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/whatsapp-video-mockup" ~/.openclaw/skills/sundial-org-awesome-openclaw-skills-whatsapp-video-mockup && rm -rf "$T"
manifest:
skills/whatsapp-video-mockup/SKILL.mdsource content
WhatsApp Video Skill
Create animated WhatsApp-style chat videos using Remotion. Perfect for X, TikTok, Instagram Reels.
Features
- 📱 Realistic iPhone frame with Dynamic Island
- 💬 WhatsApp dark mode UI (accurate colors, bubbles, timestamps)
- 📜 Auto-scrolling as messages extend
- 🔤 Large, readable fonts (optimized for mobile viewing)
- 🎵 Message notification sounds
- ✨ Spring animations on message appearance
- ⌨️ Typing indicator ("..." bubbles)
- 🔗 Link preview cards
- ✅ Read receipts (blue checkmarks)
- Bold and
formatting supportcode
Default Settings
- Aspect ratio: 4:5 (1080×1350) - optimal for X/Instagram feed
- No intro/outro - starts and ends with the chat
- 2x fonts - readable on mobile devices
- Auto-scroll - keeps all messages visible
Prerequisites
This skill requires the Remotion Best Practices skill:
npx skills add remotion-dev/skills -a claude-code -y -g
Quick Start
cd ~/Projects/remotion-test
Edit the conversation in
src/WhatsAppVideo.tsx, then render:
npx remotion render WhatsAppDemo out/my-video.mp4 --concurrency=4
How 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
- 30 fps = 30 frames per second
= appears at 1 seconddelay={30}
= appears at 2 secondsdelay={60}
= lasts 1.5 secondsduration={45}
Typical flow:
- First message:
(~0.7s)delay={20} - Typing indicator:
,delay={80}duration={45} - Response:
(after typing ends)delay={125} - Next typing:
,delay={175}duration={45} - 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:
- Bold:
**bold text**
: backticks around textCode- Line breaks:
in the string\n - Emojis: just use them directly 🎬
5. Customizing the Header
In
ChatHeader component, change:
- Name:
→ your assistant namePokey 🐡 - Status:
online - Avatar emoji
6. Update Duration
In
Root.tsx, set durationInFrames to match your video length:
- Count frames until last message appears + ~100 frames buffer
- At 30fps: 450 frames = 15 seconds
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 dev
Platform 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 videos
Sound Effects
Sounds are triggered with Sequence:
<Sequence from={125}> <Audio src={staticFile("sounds/pop.mp3")} volume={0.5} /> </Sequence>
Tips
- Preview while editing: Run
to see changes livenpm run dev - Frame-by-frame: Use timeline scrubber to check timing
- Keep messages concise: Long messages may need scroll adjustment
- Test on mobile: Check readability at actual size
Asking Pokey to Generate
Just describe the conversation:
- "WhatsApp video: me asking you to [X]"
- "Make a chat video showing [conversation]"
Pokey will write the messages, set timing, render, and send the MP4.