Lyrics Overlay Skill
Add beautiful animated lyrics/captions to videos using Remotion with multiple template styles.
Style Selection Guide (For Agent)
Choose style based on song mood, genre, and visual aesthetic:
| Style |
Component |
Best For |
Mood/Vibe |
| karaoke |
LyricsOverlay |
Pop, dance, singalong |
Energetic, fun, accessible |
| minimal |
LyricsOverlay |
Ballads, acoustic |
Clean, elegant, subtle |
| fade |
LyricsOverlay |
Narration, spoken word |
Gentle, smooth, understated |
| neon |
LyricsOverlayNeon |
Electronic, synthwave, EDM |
Cyberpunk, futuristic, high-energy |
| cinematic |
LyricsOverlayCinematic |
Epic, orchestral, trailers |
Dramatic, powerful, movie-like |
| bounce |
LyricsOverlayBounce |
Kids, fun, upbeat |
Playful, colorful, joyful |
| typewriter |
LyricsOverlayTypewriter |
Storytelling, retro, indie |
Nostalgic, intimate, artistic |
Style Details
1. Karaoke (Default)
- Position: Bottom
- Animation: Spring bounce word-by-word, current word glows
- Colors: White text, gold/orange highlight
- Use when: Standard music videos, pop songs, singalong content
2. Minimal
- Position: Bottom
- Animation: Full line shows, current word scales up slightly
- Colors: Subtle white/gray
- Use when: Clean look needed, don't distract from visuals
3. Fade
- Position: Bottom
- Animation: Words fade in smoothly as spoken
- Colors: Pure white
- Use when: Speeches, narration, gentle songs
4. Neon (Cyberpunk)
- Position: Bottom or center
- Animation: Chromatic aberration, glitch on entrance, flicker
- Colors: Magenta glow (#FF00FF), cyan split (#00FFFF)
- Effects: Scanlines, RGB split, multi-layer glow
- Use when: Electronic music, synthwave, futuristic aesthetic
5. Cinematic (Movie Trailer)
- Position: CENTER (large, dramatic)
- Animation: Words scale from big to normal with blur, uppercase
- Colors: Gold accent (#FFD700) on white
- Effects: Vignette, letterbox bars, dramatic glow
- Use when: Epic songs, trailers, powerful moments, orchestral
6. Bounce (Playful)
- Position: Center
- Animation: Words bounce in from random positions, rotation
- Colors: Rainbow palette, each word different color
- Effects: Continuous subtle bounce on active word
- Use when: Fun/upbeat songs, kids content, party vibes
7. Typewriter (Retro)
- Position: Center
- Animation: Character-by-character reveal with cursor
- Themes:
classic (white), terminal (green), vintage (sepia)
- Effects: Blinking cursor, themed backgrounds
- Use when: Storytelling, indie, nostalgic feel, artistic
Quick Start
1. Prepare Lyrics Data
cd skills/transcribe/scripts
npx tsx transcribe.ts -i <audio.mp3> -o <project>/subtitles --json
2. Create Composition
// Pick the right component for your style:
import { LyricsOverlay } from './LyricsOverlay'; // karaoke, minimal, fade
import { LyricsOverlayNeon } from './LyricsOverlayNeon'; // neon
import { LyricsOverlayCinematic } from './LyricsOverlayCinematic'; // cinematic
import { LyricsOverlayBounce } from './LyricsOverlayBounce'; // bounce
import { LyricsOverlayTypewriter } from './LyricsOverlayTypewriter'; // typewriter
import { parseElevenLabsTranscript } from './LyricsOverlay';
import { staticFile } from 'remotion';
const transcript = require('../../public/lyrics/subtitles.json');
export const MyVideo: React.FC = () => {
const lyrics = parseElevenLabsTranscript(transcript, {
maxWordsPerLine: 6,
lineGapThreshold: 0.8,
});
// Example: Cinematic style
return (
<LyricsOverlayCinematic
videoSrc={staticFile('videos/input.mp4')}
lyrics={lyrics}
fontSize={90}
accentColor="#FFD700"
isRTL={true}
useOffthreadVideo={true}
/>
);
};
3. Render
cd ~/remotion-assistant
npx remotion render MyVideo out/final.mp4
Props Reference
Common Props (All Styles)
| Prop |
Type |
Default |
Description |
videoSrc |
string |
required |
Video file path |
lyrics |
LyricsData |
required |
Parsed lyrics data |
fontSize |
number |
varies |
Base font size |
isRTL |
boolean |
auto |
Right-to-left mode |
useOffthreadVideo |
boolean |
false |
Use OffthreadVideo for better memory |
LyricsOverlay (karaoke/minimal/fade)
| Prop |
Type |
Default |
style |
'karaoke' | 'minimal' | 'fade' |
'karaoke' |
position |
'bottom' | 'center' | 'top' |
'bottom' |
primaryColor |
string |
'#FFFFFF' |
highlightColor |
string |
'#FF6B35' |
LyricsOverlayNeon
| Prop |
Type |
Default |
glowColor |
string |
'#FF00FF' |
secondaryGlow |
string |
'#00FFFF' |
glitchIntensity |
number |
0.5 |
LyricsOverlayCinematic
| Prop |
Type |
Default |
accentColor |
string |
'#FFD700' |
letterSpacing |
number |
0.15 |
| Position |
- |
CENTER (fixed) |
LyricsOverlayBounce
| Prop |
Type |
Default |
highlightColor |
string |
'#FFFFFF' |
bounceIntensity |
number |
0.7 |
position |
'bottom' | 'center' | 'top' |
'center' |
LyricsOverlayTypewriter
| Prop |
Type |
Default |
theme |
'classic' | 'terminal' | 'vintage' |
'classic' |
showCursor |
boolean |
true |
typeSpeed |
number |
20 |
position |
'bottom' | 'center' | 'top' |
'center' |
Color Presets
By Style
| Style |
Recommended Colors |
| karaoke |
Gold #FFD700, Orange #FF6B35 |
| neon |
Magenta #FF00FF + Cyan #00FFFF |
| cinematic |
Gold #FFD700, Silver #C0C0C0 |
| bounce |
Rainbow (automatic) |
| typewriter |
Theme-based (green/sepia/white) |
By Song Genre
| Genre |
Style |
Colors |
| Pop |
karaoke |
#FF6B35 highlight |
| Electronic |
neon |
#FF00FF / #00FFFF |
| Rock/Metal |
cinematic |
#FF0000 accent |
| Ballad |
minimal |
#FFFFFF highlight |
| Kids |
bounce |
Rainbow |
| Indie |
typewriter vintage |
Sepia |
Integration with music-video
This skill is called in Step 7 of the music-video pipeline.
The agent should select style based on:
- Song genre (electronic → neon, epic → cinematic)
- Energy level (high → bounce/neon, low → minimal/fade)
- Visual aesthetic (modern → neon, retro → typewriter, dramatic → cinematic)
Text Decay Behavior
All styles have slower decay - words linger ~1.5 seconds after their timing ends for better readability. The fade starts AFTER the line ends, not before.
Remotion Templates (Included)
All Remotion components are included in this skill:
.claude/skills/lyrics-overlay/remotion-templates/
├── compositions/
│ ├── LyricsOverlay.tsx # karaoke, minimal, fade
│ ├── LyricsOverlayNeon.tsx # neon/cyberpunk
│ ├── LyricsOverlayCinematic.tsx # cinematic/epic
│ ├── LyricsOverlayBounce.tsx # bounce/playful
│ └── LyricsOverlayTypewriter.tsx # typewriter/retro
└── utils/
└── lyricsParser.ts # ElevenLabs JSON parser
Setup Remotion Project
Copy templates to your Remotion project:
# One-time setup
cp -r .claude/skills/lyrics-overlay/remotion-templates/* ~/remotion-assistant/src/
Dependencies
- Remotion project (use templates above)
transcribe skill - For word-level timing (included in project)
1---2name: lyrics-overlay3description: Beautiful animated lyrics overlay for videos using Remotion. Use for: lyrics, captions, subtitles, karaoke, song text overlay.4---56# Lyrics Overlay Skill78Add beautiful animated lyrics/captions to videos using Remotion with multiple template styles.910## Style Selection Guide (For Agent)1112Choose style based on song mood, genre, and visual aesthetic:1314| Style | Component | Best For | Mood/Vibe |15|-------|-----------|----------|-----------|16| **karaoke** | `LyricsOverlay` | Pop, dance, singalong | Energetic, fun, accessible |17| **minimal** | `LyricsOverlay` | Ballads, acoustic | Clean, elegant, subtle |18| **fade** | `LyricsOverlay` | Narration, spoken word | Gentle, smooth, understated |19| **neon** | `LyricsOverlayNeon` | Electronic, synthwave, EDM | Cyberpunk, futuristic, high-energy |20| **cinematic** | `LyricsOverlayCinematic` | Epic, orchestral, trailers | Dramatic, powerful, movie-like |21| **bounce** | `LyricsOverlayBounce` | Kids, fun, upbeat | Playful, colorful, joyful |22| **typewriter** | `LyricsOverlayTypewriter` | Storytelling, retro, indie | Nostalgic, intimate, artistic |2324### Style Details2526#### 1. Karaoke (Default)27- **Position:** Bottom28- **Animation:** Spring bounce word-by-word, current word glows29- **Colors:** White text, gold/orange highlight30- **Use when:** Standard music videos, pop songs, singalong content3132#### 2. Minimal33- **Position:** Bottom34- **Animation:** Full line shows, current word scales up slightly35- **Colors:** Subtle white/gray36- **Use when:** Clean look needed, don't distract from visuals3738#### 3. Fade39- **Position:** Bottom40- **Animation:** Words fade in smoothly as spoken41- **Colors:** Pure white42- **Use when:** Speeches, narration, gentle songs4344#### 4. Neon (Cyberpunk)45- **Position:** Bottom or center46- **Animation:** Chromatic aberration, glitch on entrance, flicker47- **Colors:** Magenta glow (#FF00FF), cyan split (#00FFFF)48- **Effects:** Scanlines, RGB split, multi-layer glow49- **Use when:** Electronic music, synthwave, futuristic aesthetic5051#### 5. Cinematic (Movie Trailer)52- **Position:** CENTER (large, dramatic)53- **Animation:** Words scale from big to normal with blur, uppercase54- **Colors:** Gold accent (#FFD700) on white55- **Effects:** Vignette, letterbox bars, dramatic glow56- **Use when:** Epic songs, trailers, powerful moments, orchestral5758#### 6. Bounce (Playful)59- **Position:** Center60- **Animation:** Words bounce in from random positions, rotation61- **Colors:** Rainbow palette, each word different color62- **Effects:** Continuous subtle bounce on active word63- **Use when:** Fun/upbeat songs, kids content, party vibes6465#### 7. Typewriter (Retro)66- **Position:** Center67- **Animation:** Character-by-character reveal with cursor68- **Themes:** `classic` (white), `terminal` (green), `vintage` (sepia)69- **Effects:** Blinking cursor, themed backgrounds70- **Use when:** Storytelling, indie, nostalgic feel, artistic7172## Quick Start7374### 1. Prepare Lyrics Data7576```bash77cd skills/transcribe/scripts78npx tsx transcribe.ts -i <audio.mp3> -o <project>/subtitles --json79```8081### 2. Create Composition8283```typescript84// Pick the right component for your style:85import { LyricsOverlay } from './LyricsOverlay'; // karaoke, minimal, fade86import { LyricsOverlayNeon } from './LyricsOverlayNeon'; // neon87import { LyricsOverlayCinematic } from './LyricsOverlayCinematic'; // cinematic88import { LyricsOverlayBounce } from './LyricsOverlayBounce'; // bounce89import { LyricsOverlayTypewriter } from './LyricsOverlayTypewriter'; // typewriter9091import { parseElevenLabsTranscript } from './LyricsOverlay';92import { staticFile } from 'remotion';9394const transcript = require('../../public/lyrics/subtitles.json');9596export const MyVideo: React.FC = () => {97 const lyrics = parseElevenLabsTranscript(transcript, {98 maxWordsPerLine: 6,99 lineGapThreshold: 0.8,100 });101102 // Example: Cinematic style103 return (104 <LyricsOverlayCinematic105 videoSrc={staticFile('videos/input.mp4')}106 lyrics={lyrics}107 fontSize={90}108 accentColor="#FFD700"109 isRTL={true}110 useOffthreadVideo={true}111 />112 );113};114```115116### 3. Render117118```bash119cd ~/remotion-assistant120npx remotion render MyVideo out/final.mp4121```122123## Props Reference124125### Common Props (All Styles)126127| Prop | Type | Default | Description |128|------|------|---------|-------------|129| `videoSrc` | string | required | Video file path |130| `lyrics` | LyricsData | required | Parsed lyrics data |131| `fontSize` | number | varies | Base font size |132| `isRTL` | boolean | auto | Right-to-left mode |133| `useOffthreadVideo` | boolean | false | Use OffthreadVideo for better memory |134135### LyricsOverlay (karaoke/minimal/fade)136137| Prop | Type | Default |138|------|------|---------|139| `style` | 'karaoke' \| 'minimal' \| 'fade' | 'karaoke' |140| `position` | 'bottom' \| 'center' \| 'top' | 'bottom' |141| `primaryColor` | string | '#FFFFFF' |142| `highlightColor` | string | '#FF6B35' |143144### LyricsOverlayNeon145146| Prop | Type | Default |147|------|------|---------|148| `glowColor` | string | '#FF00FF' |149| `secondaryGlow` | string | '#00FFFF' |150| `glitchIntensity` | number | 0.5 |151152### LyricsOverlayCinematic153154| Prop | Type | Default |155|------|------|---------|156| `accentColor` | string | '#FFD700' |157| `letterSpacing` | number | 0.15 |158| **Position** | - | **CENTER (fixed)** |159160### LyricsOverlayBounce161162| Prop | Type | Default |163|------|------|---------|164| `highlightColor` | string | '#FFFFFF' |165| `bounceIntensity` | number | 0.7 |166| `position` | 'bottom' \| 'center' \| 'top' | 'center' |167168### LyricsOverlayTypewriter169170| Prop | Type | Default |171|------|------|---------|172| `theme` | 'classic' \| 'terminal' \| 'vintage' | 'classic' |173| `showCursor` | boolean | true |174| `typeSpeed` | number | 20 |175| `position` | 'bottom' \| 'center' \| 'top' | 'center' |176177## Color Presets178179### By Style180181| Style | Recommended Colors |182|-------|-------------------|183| karaoke | Gold `#FFD700`, Orange `#FF6B35` |184| neon | Magenta `#FF00FF` + Cyan `#00FFFF` |185| cinematic | Gold `#FFD700`, Silver `#C0C0C0` |186| bounce | Rainbow (automatic) |187| typewriter | Theme-based (green/sepia/white) |188189### By Song Genre190191| Genre | Style | Colors |192|-------|-------|--------|193| Pop | karaoke | `#FF6B35` highlight |194| Electronic | neon | `#FF00FF` / `#00FFFF` |195| Rock/Metal | cinematic | `#FF0000` accent |196| Ballad | minimal | `#FFFFFF` highlight |197| Kids | bounce | Rainbow |198| Indie | typewriter vintage | Sepia |199200## Integration with music-video201202This skill is called in Step 7 of the music-video pipeline.203204The agent should select style based on:2051. **Song genre** (electronic → neon, epic → cinematic)2062. **Energy level** (high → bounce/neon, low → minimal/fade)2073. **Visual aesthetic** (modern → neon, retro → typewriter, dramatic → cinematic)208209## Text Decay Behavior210211All styles have **slower decay** - words linger ~1.5 seconds after their timing ends for better readability. The fade starts AFTER the line ends, not before.212213## Remotion Templates (Included)214215All Remotion components are included in this skill:216217```218.claude/skills/lyrics-overlay/remotion-templates/219├── compositions/220│ ├── LyricsOverlay.tsx # karaoke, minimal, fade221│ ├── LyricsOverlayNeon.tsx # neon/cyberpunk222│ ├── LyricsOverlayCinematic.tsx # cinematic/epic223│ ├── LyricsOverlayBounce.tsx # bounce/playful224│ └── LyricsOverlayTypewriter.tsx # typewriter/retro225└── utils/226 └── lyricsParser.ts # ElevenLabs JSON parser227```228229### Setup Remotion Project230231Copy templates to your Remotion project:232```bash233# One-time setup234cp -r .claude/skills/lyrics-overlay/remotion-templates/* ~/remotion-assistant/src/235```236237## Dependencies238239- Remotion project (use templates above)240- `transcribe` skill - For word-level timing (included in project)