CRITICAL GUIDELINES
Windows File Path Requirements
MANDATORY: Always Use Backslashes on Windows for File Paths
When using Edit or Write tools on Windows, you MUST use backslashes (\) in file paths, NOT forward slashes (/).
Documentation Guidelines
NEVER create new documentation files unless explicitly requested by the user.
Viral Video Hook Templates (2025-2026)
The Science of Hooks
The Critical Window: You have 1.3-3 seconds to stop the scroll. Research shows:
- 65% of viewers decide to watch or skip within 3 seconds
- Videos with strong hooks have 2-3x higher completion rates
- The hook accounts for up to 80% of a video's viral potential
Hook Timing Reference
Optimal Hook Durations by Type
| Hook Type | Duration | Reasoning | |-----------|----------|-----------| | Pattern Interrupt (visual) | 0.3-0.5s | Quick shock, then content | | Pattern Interrupt (text) | 1.0-1.5s | Time to read "STOP" etc | | Curiosity Gap | 2.0-3.0s | Two-part reveal timing | | Direct Challenge | 1.5-2.5s | Read + process + react | | Transformation Tease | 2.0-3.0s | Before/after comparison | | Question Hook | 1.5-2.0s | Read + mental engagement |
FFmpeg Time Units Quick Reference
All FFmpeg filter expressions use SECONDS with decimals:
| Expression | Meaning | Example Use |
|------------|---------|-------------|
| t | Current time | enable='lt(t,2)' = first 2 seconds |
| between(t,0,2.5) | Time range | Hook visible for 2.5s |
| if(lt(t,1),expr1,expr2) | Conditional | Different effect in first second |
| sin(t*10) | Oscillation | 10 cycles per second |
| exp(-t*3) | Decay | Quick fade (3 = fast decay) |
Recommended Hook Timing
# Hook window timing breakdown:
# 0.0-0.3s: Visual impact (flash, zoom, color)
# 0.3-1.5s: Primary hook text appears
# 1.0-2.5s: Secondary text/elaboration
# 2.5-3.0s: Transition to main content
# Example: Complete hook with timed elements
ffmpeg -i input.mp4 \
-vf "
eq=brightness='0.2*between(t,0,0.2)',
drawtext=text='STOP':fontsize=80:fontcolor=red:x=(w-tw)/2:y=h*0.12:enable='between(t,0.2,1.5)',
drawtext=text='This changes everything':fontsize=48:fontcolor=white:x=(w-tw)/2:y=h*0.20:enable='between(t,1.0,2.8)'
" \
output_timed_hook.mp4
The 10 Proven Hook Templates
A compact index of the ten canonical viral-video hooks. Each entry has its full FFmpeg filter graph and parameters in references/ten-hook-templates.md.
- Pattern Interrupt — unexpected visual shift in the first 0.5 s.
- Question Hook — provocative text overlay aligned with quick cut.
- Bold Statement Hook — declarative on-screen text with emphasis.
- Curiosity Gap — partial reveal that promises payoff later.
- Negative Hook — counterintuitive opener.
- Number Hook — "5 things..." text overlay.
- Story Hook — open with a mid-action scene.
- Visual Spectacle — striking transition or shot composition.
- Direct Address — character looks into camera and speaks first frame.
- Cliffhanger — hold a beat that resolves seconds later.
Load references/ten-hook-templates.md for the full filter graph of any template.
Visual Hook Effects Library
Shake/Tremor Effect
# Subtle shake for emphasis
ffmpeg -i input.mp4 \
-vf "crop=1060:1900:(10+10*sin(t*30)):(10+10*cos(t*25)):enable='lt(t,1)',scale=1080:1920" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_shake.mp4
Zoom Pulse
# Rhythmic zoom pulse - 8% amplitude at ~2Hz for 1.5s (60% more visible than 5%)
# sin(t*12) = 12 rad/s = 1.91 Hz oscillation. Completes before 1.3-second decision point
# Note: 60fps ensures smooth motion; d=1 for continuous per-frame processing
ffmpeg -i input.mp4 \
-vf "fps=60,zoompan=z='if(lt(t,1.5),1+0.08*sin(t*12),1)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=1080x1920" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_zoom_pulse.mp4
Color Flash
# Red flash then normal
ffmpeg -i input.mp4 \
-vf "colorbalance=rs=0.5:gs=-0.2:bs=-0.2:enable='lt(t,0.3)',colorbalance=rs=0.3:enable='between(t,0.3,0.5)'" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_color_flash.mp4
Vignette Reveal
# Dark vignette that opens up
ffmpeg -i input.mp4 \
-vf "vignette=PI*min(t,2)/2" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_vignette_reveal.mp4
A/B Testing Workflow
Generate Multiple Hook Variants
#!/bin/bash
# generate_hook_variants.sh - Create multiple hook versions for testing
INPUT="$1"
BASE=$(basename "$INPUT" .mp4)
# Variant A: Curiosity Gap
ffmpeg -i "$INPUT" \
-vf "drawtext=text='Wait for it...':fontsize=64:fontcolor=yellow:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.15:enable='between(t,0,2)'" \
-c:v libx264 -preset fast -crf 23 -c:a copy \
"${BASE}_hook_A.mp4" &
# Variant B: Direct Challenge
ffmpeg -i "$INPUT" \
-vf "drawtext=text='STOP SCROLLING':fontsize=72:fontcolor=red:borderw=5:bordercolor=white:x=(w-tw)/2:y=h*0.12:enable='between(t,0,2)'" \
-c:v libx264 -preset fast -crf 23 -c:a copy \
"${BASE}_hook_B.mp4" &
# Variant C: Question Hook
ffmpeg -i "$INPUT" \
-vf "drawtext=text='Did you know?':fontsize=56:fontcolor=white:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.15:enable='between(t,0,2)'" \
-c:v libx264 -preset fast -crf 23 -c:a copy \
"${BASE}_hook_C.mp4" &
wait
echo "Generated 3 hook variants for A/B testing"
ls -la "${BASE}_hook_*.mp4"
Hook Performance Metrics
| Hook Type | Avg Stop Rate | Best Content Type | Risk Level | |-----------|---------------|-------------------|------------| | Pattern Interrupt | 85% | All | Low | | Curiosity Gap | 78% | Educational | Low | | Direct Challenge | 75% | Opinion/Niche | Medium | | Transformation | 80% | Tutorial/Demo | Low | | Bold Claim | 72% | How-to | Medium | | Counter-Intuitive | 70% | Educational | Medium | | Social Proof | 68% | Reviews | Low | | Urgency | 65% | Trending/News | High | | Storytelling | 82% | Personal/Brand | Low | | Question | 74% | Educational | Low |
Platform-Specific Hook Recommendations
| Platform | Best Hooks | Avoid | |----------|-----------|-------| | TikTok | Pattern Interrupt, Curiosity Gap, Direct Challenge | Long text hooks | | YouTube Shorts | Transformation, Question, Storytelling | Clickbait-y urgency | | Instagram Reels | Social Proof, Transformation, Bold Claim | Too promotional | | Facebook Reels | Storytelling, Social Proof, Question | Youth slang |
Animation, Color & Audio Parameters (2025-2026)
Concrete parameter values for animation timing, color grading LUTs, and audio hook design live in references/animation-color-audio-parameters.md. Highlights:
- Animation timing: kinetic-text holds at 0.4-0.6 s; pattern-interrupt cuts at 0.3 s.
- Color grading: boost saturation 1.15-1.3x for thumbnail pop; teal/orange split-tone for cinematic feel.
- Audio: trending sound layer at -8 dB under primary; voice-over at -3 dB.
Related Skills
viral-video-platform-specs- Platform requirementsviral-video-animated-captions- Caption stylingffmpeg-viral-tiktok- TikTok optimizationffmpeg-viral-shorts- YouTube Shorts optimization