🎬 Open source · Desktop app

Build videos from clips and photos
on one simple timeline

Drop in video clips, photos, music, and titles. Drag to arrange, overlap to crossfade, press play to preview, export to MP4. No learning curve, no subscription.

⬇ Get started on GitHub Read the docs
🎞 Timeline editing 🖼 Photo slideshows 🎵 Music & titles 🐍 Python · PySide6 + ffmpeg 📄 MIT License
VideoBuilder — timeline editor with media pool, preview, and three tracks

Everything you need for everyday video editing

From a folder of files to a finished MP4 — without the complexity of a professional NLE.

🎞

Three-track timeline

Video, audio, and titles on separate tracks. Drag clips to arrange, drag edges to trim, press S to split at the playhead, Delete to remove. Snapping keeps everything aligned.

Crossfades by overlap

Drag one clip over the end of another — the overlap automatically becomes a crossfade of exactly that length. What you see on the timeline is what exports. No transition menus.

🖼

Batch photo import

Pick individual images or a whole folder at once. Set seconds-per-photo and they land on the timeline back-to-back — 10 photos at 2s each becomes a 20-second video, instantly.

Bulk timing control

Ctrl+A or Ctrl-click to select several clips, type a new duration, done. "Pack Clips Tight" closes gaps and resolves overlaps so playback is always smooth.

📝

Titles

Double-click the Titles row to add text at any point; double-click an existing title to edit it. Rendered with ffmpeg drawtext, boxed and centered, exactly as previewed.

🎵

Music track

Drop an audio file onto the timeline and slide it to where it should start. Mixed with each video clip's own sound at export; trimmed automatically to the video's length.

▶️

Full-video preview

One button renders the entire timeline — clips, crossfades, titles, and music blended together — and plays it in the preview pane. Pixel-for-pixel what Export will produce.

↩️

Undo & unsaved-changes safety

Up to 100 steps of undo/redo with Ctrl+Z / Ctrl+Shift+Z. The title bar marks unsaved work with a * and closing prompts you to save — no silent data loss.

📦

MP4 export via ffmpeg

The whole timeline compiles to a single ffmpeg filter graph — trims, concats, xfades, drawtext, and audio mixing in one pass. Standard H.264/AAC output that plays everywhere.

From a folder of photos to a finished video

The fastest path from "here are my vacation pictures" to a video you can share.

1 · Add Images → Choose Folder

Point it at a folder and every photo lands on the timeline in order, each shown for the duration you choose. Thumbnails decode in the background — even hundreds of full-resolution photos never freeze the app.

2 · Add music and a title

Select your music file in the pool and click "Add Selected to Timeline". Double-click the Titles row to drop a caption over the opening seconds.

3 · Adjust timing, preview, export

Select all photos with Ctrl+A and change the per-photo time in one step. Press ▶ Preview Full Video to hear how the music blends, then Export Video.

whole-folder import 10 photos × 2s = 20s video bulk re-timing background music flip-through preview
VideoBuilder timeline — photo sequence with music and title tracks

Up and running in minutes

Python 3.10+, ffmpeg, Linux / macOS / Windows. No build step — clone and run.

1

Install ffmpeg

VideoBuilder uses ffmpeg for all media processing. One package-manager command on any OS — see the install guide for your platform.

2

Clone and run the launcher

./run.sh creates the virtual environment and installs PySide6 + Pillow automatically on first use, then starts the app.

3

Build your first video

The app opens straight into an empty project. Import media or add a folder of photos, arrange them on the timeline, and export.

# Install ffmpeg (Ubuntu/Debian shown; see docs for macOS & Windows)
sudo apt install ffmpeg

# Clone the repository
git clone https://github.com/mnavas/videobuilder.git
cd videobuilder

# Run — first launch sets up the venv and dependencies automatically
./run.sh

For platform-specific packages, manual setup, and troubleshooting see docs/installation.md.

Help make it better

VideoBuilder is open source and welcomes contributions of any size.

🐛

Report a bug

Found something that crashes or behaves unexpectedly? Open an issue on GitHub with steps to reproduce and your OS / Python / ffmpeg versions.

Open an issue →
💡

Suggest a feature

Have an idea for a transition, export preset, or workflow improvement? Open a feature request and describe what you'd like to see.

Request a feature →
🔧

Submit a pull request

Fork the repo, create a branch, and send a PR. Check analysis.md first — it explains the architecture and design decisions.

Fork on GitHub →
📖

Improve the docs

Spotted a gap in the installation guide? Docs are plain Markdown in the docs/ folder — easy to edit and submit.

Browse the docs →

Keep VideoBuilder free and actively maintained

VideoBuilder is built and maintained as a side project. It's free and open source — but development tools, time, and motivation all have a real cost.

If the app saves you time turning clips and photos into videos, consider sponsoring the project. Every contribution helps keep it maintained and improving.

All contributions go directly to the developer. No company, no VC behind this.

📄 MIT License

Free and open source

VideoBuilder is released under the MIT License. Use it, fork it, modify it. No restrictions, no telemetry, no vendor lock-in.

View on GitHub →