A powerful Python script that creates stunning slideshow videos from PNG images with smooth transitions, perfect for VRChat worlds and presentations.
🎬 50+ Different Transition Types:
- Basic Fades: fade, fadeblack, fadewhite, fadegrays
- Wipe Effects: wipeleft, wiperight, wipeup, wipedown, wipetl, wipetr, wipebl, wipebr
- Slide Effects: slideleft, slideright, slideup, slidedown
- Smooth Effects: smoothleft, smoothright, smoothup, smoothdown
- Circle Effects: circlecrop, circleclose, circleopen
- Rectangle Effects: rectcrop
- Horizontal/Vertical: horzclose, horzopen, vertclose, vertopen
- Diagonal Effects: diagbl, diagbr, diagtl, diagtr
- Slice Effects: hlslice, hrslice, vuslice, vdslice
- Special Effects: dissolve, pixelize, radial, hblur, distance
- Squeeze Effects: squeezev, squeezeh
- Zoom Effects: zoomin
- Wind Effects: hlwind, hrwind, vuwind, vdwind
- Cover Effects: coverleft, coverright, coverup, coverdown
- Reveal Effects: revealleft, revealright, revealup, revealdown
✨ Advanced Features:
- Text overlays showing transition names during playback
- Variable image durations (4-5 seconds by default)
- Automatic audio duration matching
- Chunked processing for reliability
- Progress reporting during creation
- Audio reuse for faster subsequent runs
- Support for multiple audio files (merged automatically)
- Python 3.6+
- FFmpeg (with xfade filter support)
- ImageMagick (for image metadata)
# Install Python dependencies (if any)
pip install -r requirements.txt
# Ensure FFmpeg is installed
sudo apt-get install ffmpeg imagemagickpython3 main.py [image_directory]--test: Create a 1-minute test video instead of full duration--min-duration SECONDS: Minimum duration for each image (default: 3)--max-duration SECONDS: Maximum duration for each image (default: 5)
# Create full slideshow from images in current directory
python3 main.py
# Create test slideshow (1 minute) from specific directory
python3 main.py --test /path/to/images
# Create slideshow with custom durations
python3 main.py --min-duration 3 --max-duration 6 /path/to/imagesfrom slideshow_maker import create_slideshow_with_audio
# Create slideshow programmatically
success = create_slideshow_with_audio(
image_dir="/path/to/images",
test_mode=False,
min_duration=3,
max_duration=5
)See docs/beatslides.md for the full reference of the beatslides command, including beat detection, selection windows, and on-beat debug overlays (markers, pulses, bloom, counters).
The old slideshow.py file is still available for backward compatibility:
# This still works
python3 slideshow.py /path/to/imagesSee MIGRATION.md for detailed migration information.
- Image Processing: Converts PNG images to video clips with variable durations
- Transition Creation: Applies smooth transitions between image clips using FFmpeg's xfade filter
- Audio Merging: Combines multiple MP3/M4A files into a single audio track
- Video Assembly: Combines video slideshow with audio, looping video to match audio duration
- Text Overlays: Adds transition names as text overlays for identification
The script cycles through ALL 50+ FFmpeg xfade transition effects! Here's the complete list:
fade- Simple crossfade (default)fadeblack- Fade through blackfadewhite- Fade through whitefadegrays- Fade through grayscale
wipeleft- Wipe from left to rightwiperight- Wipe from right to leftwipeup- Wipe from bottom to topwipedown- Wipe from top to bottomwipetl- Wipe from top-leftwipetr- Wipe from top-rightwipebl- Wipe from bottom-leftwipebr- Wipe from bottom-right
slideleft- Slide from leftslideright- Slide from rightslideup- Slide from bottomslidedown- Slide from top
smoothleft- Smooth wipe from leftsmoothright- Smooth wipe from rightsmoothup- Smooth wipe from bottomsmoothdown- Smooth wipe from top
circlecrop- Circular crop transitioncircleclose- Circle closingcircleopen- Circle opening
rectcrop- Rectangular crop transition
horzclose- Horizontal closehorzopen- Horizontal openvertclose- Vertical closevertopen- Vertical open
diagbl- Diagonal bottom-leftdiagbr- Diagonal bottom-rightdiagtl- Diagonal top-leftdiagtr- Diagonal top-right
hlslice- Horizontal left slicehrslice- Horizontal right slicevuslice- Vertical up slicevdslice- Vertical down slice
dissolve- Dissolve effectpixelize- Pixelize effectradial- Radial transitionhblur- Horizontal blurdistance- Distance effect
squeezev- Vertical squeezesqueezeh- Horizontal squeeze
zoomin- Zoom in transition
hlwind- Horizontal left windhrwind- Horizontal right windvuwind- Vertical up windvdwind- Vertical down wind
coverleft- Cover from leftcoverright- Cover from rightcoverup- Cover from bottomcoverdown- Cover from top
revealleft- Reveal from leftrevealright- Reveal from rightrevealup- Reveal from bottomrevealdown- Reveal from top
Total: 50+ transition types - All based on the official FFmpeg xfade documentation!
slideshow_with_audio.mp4- Final video with slideshow and audioaudio_merged.m4a- Merged audio file (reused on subsequent runs)
slideshow-maker/
├── src/
│ └── slideshow_maker/ # Main package
│ ├── __init__.py # Package initialization
│ ├── config.py # Configuration and constants
│ ├── transitions.py # Transition management (50+ effects)
│ ├── audio.py # Audio processing
│ ├── video.py # Video processing
│ ├── utils.py # Utility functions
│ └── slideshow.py # Main orchestrator
├── main.py # New entry point
├── setup.py # Package setup
├── slideshow.py # Legacy entry point (backward compatibility)
├── test_modular.py # Test script
└── MIGRATION.md # Migration guide
/path/to/images/
├── image1.png
├── image2.png
├── audio1.mp3
├── audio2.mp3
└── ...
- Video Format: H.264/AAC MP4
- Resolution: 1920x1080 (configurable)
- Frame Rate: 25 FPS
- Quality: CRF 23 (high quality)
- Chunk Size: 10 images per processing chunk
Perfect for VRChat worlds:
- High-quality video output
- Smooth transitions between slides
- Audio synchronization
- Text overlays for presentation clarity
- Optimized file sizes for Unity import
FFmpeg not found:
sudo apt-get install ffmpegImages not processing:
- Ensure images are PNG format
- Check file permissions
- Verify ImageMagick is installed
Transitions not working:
- Update FFmpeg to latest version
- Check xfade filter availability
- Verify transition names are correct
Audio sync issues:
- Check audio file formats (MP3/M4A supported)
- Ensure audio files are not corrupted
- Verify FFmpeg audio processing capabilities
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is part of the IntroVRt Lounge organization and is available under the MIT License.
For issues, questions, or feature requests:
- Create an issue on GitHub
- Check the troubleshooting section
- Review FFmpeg documentation for advanced usage
Created by IntroVRt Lounge - Making VR experiences more immersive! 🎭✨