This guide shows how to test the full pipeline quickly with low-resolution rendering to verify everything works before doing a full production render.
| Config | Resolution | FPS | Render Time* | File Size | Use Case |
|---|---|---|---|---|---|
| config_ultra_fast.yaml | 320x180 | 12 | ~2-3 min | ~200KB | Fastest verification |
| config_quick_test.yaml | 640x360 | 24 | ~5-10 min | ~1-2MB | Good quality test |
| config.yaml | 1920x1080 | 24 | ~30-60 min | ~5-10MB | Production quality |
*For 30-second song on typical hardware
The quick_test.py script automates the entire pipeline:
# Basic quick test (uses existing lyrics.txt)
python quick_test.py
# Auto-generate lyrics + full test
python quick_test.py --auto-lyrics
# Test without lyrics display
python quick_test.py --no-lyrics
# Enable debug visualization
python quick_test.py --debugWhat it does:
- ✓ Checks all required files exist
- ✓ Optionally generates lyrics with Whisper
- ✓ Runs Phase 1 (audio prep) - ~10 seconds
- ✓ Runs Phase 2 (rendering) - ~5-10 minutes at 360p
- ✓ Runs Phase 3 (export) - ~30 seconds
- ✓ Reports total time and output location
Expected output:
✓ Full pipeline completed in 7.3 minutes
Output video: outputs/quick_test/quick_test.mp4
Resolution: 640x360 (360p)
File size: 1.45 MB
Fastest possible test - minimal quality but verifies pipeline works:
# 1. Optional: Auto-generate lyrics
python auto_lyrics_whisper.py assets/song.wav \
--output assets/lyrics.txt \
--model tiny
# 2. Run pipeline with ultra-fast config
python main.py --config config_ultra_fast.yaml
# 3. Check output
ls -lh outputs/ultra_fast/ultra_fast.mp4Resolution: 320x180 (180p) Quality: Very low (grainy, but proves it works) Time: 2-3 minutes for 30s song
Better quality while still being fast:
# 1. Optional: Auto-generate lyrics
python auto_lyrics_whisper.py assets/song.wav \
--output assets/lyrics.txt \
--model base
# 2. Run pipeline with quick test config
python main.py --config config_quick_test.yaml
# 3. Check output
ls -lh outputs/quick_test/quick_test.mp4Resolution: 640x360 (360p) Quality: Medium (clearly visible, good for testing) Time: 5-10 minutes for 30s song
resolution: [320, 180] # 180p - tiny but fast
fps: 12 # Half frame rate
samples: 16 # Minimal quality
mode: "2d_grease" # 2D is faster than 3D
enable_effects: false # No fog, particles, etc.
quality: "low" # Fast encodingUse when: You just want to verify the pipeline runs
resolution: [640, 360] # 360p - watchable quality
fps: 24 # Normal frame rate
samples: 32 # Decent quality
mode: "2d_grease" # 2D for speed
enable_effects: false # Minimal effects
quality: "medium" # Balanced encodingUse when: You want to check positioning, timing, and overall look
resolution: [1920, 1080] # 1080p - full HD
fps: 24 # Standard
samples: 128 # High quality
mode: "3d" or "2d_grease" # Your choice
enable_effects: true # All effects
quality: "high" # Best encodingUse when: Final output for sharing/publishing
| Phase | Time | Notes |
|---|---|---|
| Phase 1 (Audio Prep) | 10s | Same for all configs |
| Phase 2 (Rendering) | 1-2 min | 180p @ 12fps = ~180 frames |
| Phase 3 (Export) | 20s | Small file, quick encode |
| Total | 2-3 min | Fastest verification |
| Phase | Time | Notes |
|---|---|---|
| Phase 1 (Audio Prep) | 10s | Same for all configs |
| Phase 2 (Rendering) | 4-8 min | 360p @ 24fps = ~720 frames |
| Phase 3 (Export) | 30s | Medium file |
| Total | 5-10 min | Good quality test |
| Phase | Time | Notes |
|---|---|---|
| Phase 1 (Audio Prep) | 10s | Same for all configs |
| Phase 2 (Rendering) | 25-50 min | 1080p @ 24fps = ~720 frames |
| Phase 3 (Export) | 1-2 min | Large file, slower encode |
| Total | 30-60 min | Production quality |
Times vary based on CPU/GPU performance
-
Use 2D mode instead of 3D:
animation: mode: "2d_grease" # ~2x faster than "3d"
-
Lower resolution:
video: resolution: [640, 360] # 1/9th pixels of 1080p
-
Reduce samples:
video: samples: 32 # Lower = faster but grainier
-
Disable effects:
animation: enable_effects: false effects: fog: enabled: false particles: enabled: false
-
Use EEVEE not CYCLES:
video: render_engine: "EEVEE" # Much faster than CYCLES
-
Lower FPS for testing:
video: fps: 12 # Half the frames = half the time
After running quick test, verify:
- Mascot visible and positioned correctly
- Lyrics appear in lower third of frame
- Lyrics NOT behind mascot
- Text is readable (even at low res)
- Mascot moves on beats (gesture animation)
- Mouth shapes change (lip sync)
- Lyrics appear/disappear at correct times
- Audio is synchronized with video
- No audio crackling or distortion
- Volume levels appropriate
- Video length matches audio length
- All lyrics show up (none missing)
- Transitions are smooth
Problem: Phase 2 taking over 30 minutes for quick test
Solutions:
- Use
config_ultra_fast.yamlinstead - Check CPU/GPU usage (should be high)
- Close other applications
- Reduce resolution further:
[320, 180]
Problem: Pipeline times out during rendering
Solutions:
-
Use quick test script with longer timeout:
# quick_test.py already has generous timeouts python quick_test.py
-
Run phases separately:
python main.py --config config_quick_test.yaml --phase 1 python main.py --config config_quick_test.yaml --phase 2 python main.py --config config_quick_test.yaml --phase 3
Problem: 180p or 360p video too small
Solutions:
- Use media player zoom/fullscreen
- Use
config_quick_test.yaml(360p) instead of ultra-fast - Remember: this is just for verification
Problem: No lyrics visible in output
Check:
- Does
assets/lyrics.txtexist? - Is
enable_lyrics: truein config? - Are lyrics timing within video duration?
- Run with
debug_mode: trueto see text zone marker
# 1. Install optional dependencies
pip install -r requirements-lyrics-auto.txt
# 2. Verify files
ls assets/song.wav assets/fox.png
# 3. Run ultra-fast test (verify it works)
python main.py --config config_ultra_fast.yaml
# 4. Check output
ls outputs/ultra_fast/ultra_fast.mp4# 1. Make changes to config or code
# 2. Quick test with automation
python quick_test.py --auto-lyrics
# 3. Review output
# (Check positioning, timing, etc.)
# 4. If good, render production quality
python main.py --config config.yaml# 1. Test with quick config
python main.py --config config_quick_test.yaml
# 2. Verify everything looks good
# - Positioning correct
# - Timing accurate
# - Animations working
# 3. Enable debug mode for verification
# Edit config_quick_test.yaml: debug_mode: true
python main.py --config config_quick_test.yaml --phase 2
# 4. Check first frame for debug markers
# Should see colored spheres at key positions
# 5. If all good, do production render
python main.py --config config.yaml| Resolution | Duration | Quality | Size Range |
|---|---|---|---|
| 320x180 | 30s | Low | 100-300KB |
| 640x360 | 30s | Medium | 800KB-2MB |
| 1920x1080 | 30s | High | 4-10MB |
Larger files indicate:
- Higher quality (good)
- Longer duration (good)
- Encoding issues (check logs)
Once quick test succeeds:
- Adjust positioning if needed (see POSITIONING_GUIDE.md)
- Fine-tune lyrics timing (edit lyrics.txt or regenerate)
- Enable debug mode to verify positions
- Test with different styles (2D vs 3D, different effects)
- Run production render with full quality
For fastest verification:
python main.py --config config_ultra_fast.yamlFor better quality test:
python quick_test.py --auto-lyricsFor production:
python main.py --config config.yamlCreated: 2025-11-18 Related: AUTOMATED_LYRICS_GUIDE.md, POSITIONING_GUIDE.md, README.md