Desktop application for seamless video looping, audio mastering, and visual editing. Built with Electron, React, and FFmpeg.
- Loop short videos to any target duration (1 min to 24 hours)
- Loop styles: Normal, Crossfade, Ping-pong
- Auto-detect optimal loop points with quality scoring
- Trim start/end, mute/fade audio
- Output presets: YouTube 1080p, Shorts 9:16, Square, 4K Wallpaper
- Batch export multiple videos
- Loudness analysis (LUFS, True Peak, LRA)
- Waveform visualization + beat detection
- 3-band EQ (Bass / Mid / Treble)
- Compressor, De-Hum, Noise Gate, High/Low Pass Filter
- Loudness normalize (target LUFS)
- Hard limiter, Fade in/out
- Presets: Streaming Safe, Loud Social, Podcast, Background
- Export: WAV, MP3, M4A
- Combine video/image + audio + effects into one video
- Gallery slideshow with Ken Burns + transitions
- Multi-track audio mixer (Main + BGM + Voice + SFX)
- Audio spectrum visualizer (Bar/Wave) synced to music
- Bass-reactive effects (shake/pulse)
- Particle overlays (snow, flowers, fog)
- Auto lyrics from LRC/SRT/text or AI transcription (Groq Whisper)
- Live canvas editor: drag & resize spectrum, text, particles, lyrics
- Plugin system for custom particle effects
- Export queue for batch rendering
- Preset save/load, auto-save & reset
- Render history with filter and delete
- Drag & drop media files
- Gallery thumbnail preview
- Settings page (API keys)
- Help documentation
- Desktop: Electron 42
- Frontend: React 19, Vite 8, TypeScript
- Backend: Node.js HTTP server (no framework)
- Rendering: FFmpeg (bundled)
- Database: SQLite (optional) + JSON fallback
- AI: Groq Whisper API for audio transcription
- Node.js 18+
- FFmpeg binary (bundled or in PATH)
# Clone
git clone https://github.com/asrocia/loopingvid.git
cd loopingvid
# Install dependencies
npm install --no-optional
cd frontend && npm install && cd ..
# Copy FFmpeg binaries to bin/windows/ (or bin/macos/ or bin/linux/)
# See electron/resources/bin/windows/README.md
# Start development (API + Frontend + Electron)
npm run dev| Script | Description |
|---|---|
npm run dev |
Start all (API + Vite + Electron) |
npm run dev:api |
Start backend API only |
npm run dev:web |
Start frontend Vite dev server |
npm run electron:dev |
Start Electron shell only |
npm run build:web |
Build frontend for production |
npm run prepare:build |
Package backend + binaries for distribution |
npm run electron:build |
Build installer (.exe) |
npm run smoke:api |
Run API smoke tests |
npm run smoke:render |
Run render smoke tests |
npm run prepare:build
npm run build:web
npm run electron:buildOutput: release/ folder with NSIS installer.
loopingvid/
├── backend/ # Node.js API server
│ ├── server.mjs
│ ├── routes.mjs
│ ├── loop-engine.mjs
│ ├── audio-engine.mjs
│ ├── editor-engine.mjs
│ ├── lyrics-engine.mjs
│ ├── transcribe-engine.mjs
│ ├── plugin-loader.mjs
│ ├── queue-runner.mjs
│ ├── db.mjs
│ └── ...
├── frontend/ # React + Vite
│ └── src/
│ ├── pages/
│ ├── components/ui/
│ ├── lib/
│ └── types/
├── electron/ # Electron shell
│ ├── main.mjs
│ ├── preload.cjs
│ └── resources/
├── plugins/ # User plugins (particle overlays)
├── tools/ # Dev scripts & smoke tests
└── bin/ # FFmpeg binaries
Create custom particle effects by adding a folder in plugins/:
plugins/rain/
├── manifest.json
└── rain.mp4
{
"name": "Rain",
"type": "particle",
"file": "rain.mp4",
"author": "Your Name"
}| Method | Path | Description |
|---|---|---|
| GET | /api/health | Health check + FFmpeg status |
| POST | /api/loop/start | Start async loop render |
| POST | /api/loop/render | Sync loop render |
| POST | /api/mastering/render | Master audio file |
| POST | /api/editor/start | Start async editor render |
| POST | /api/editor/preview | Render 10s preview |
| POST | /api/transcribe | AI audio transcription |
| GET | /api/history | Render history |
| GET | /api/plugins | List installed plugins |
| GET | /api/queue | Export queue status |
MIT
Evaders — Facebook