Interlude
Play music while long-running build processes are detected. Never wait in silence again!
Interlude watches for build processes (like docker buildx, go build, cargo build, make, etc.) and automatically starts playing music when they've been running for a configurable amount of time. The music stops when the build completes.
Features
- Automatic Detection: Watches for common build processes across all platforms (Linux, macOS, Windows)
- Built-in Song Library: Comes with 6 royalty-free songs to choose from
- Customizable Music: Add your own MP3, WAV, OGG files or stream from URLs
- Song Picker: Easily switch between songs from the status bar menu
- Volume Control: Adjust volume from 5% to 100% via the UI
- Configurable Patterns: Add or remove process patterns to watch for
- Exclusion Patterns: Automatically excludes watch modes and dev servers to avoid false positives
- Permanent Disable: Disable specific patterns permanently so they won't trigger again
- Process Tree Deduplication: Only tracks root build processes, preventing duplicate triggers when a parent process spawns children
- Minimum Runtime Threshold: Only play music for builds that take longer than a specified time
- Fade In/Out: Smooth audio transitions when starting and stopping
- Status Bar Integration: Click the status bar to see tracked processes and manage them
Installation
Search for "Interlude" in the VS Code Extensions view, or install from the command line:
code --install-extension PatapscoAI.interlude
Usage
Click the Interlude status bar item to open the menu:
- Toggle Extension: Enable or disable Interlude
- Stop Music: Immediately stop playback (when music is playing)
- Tracked Processes: View currently tracked processes with options to:
- Dismiss (this session): Stop tracking a process temporarily
- Disable pattern permanently: Never track this pattern again
- Select Song: Choose from built-in songs or add your own
- Set Volume: Adjust playback volume (5% to 100%)
- Test Audio: Test that audio playback is working
- Manage Disabled Patterns: Re-enable patterns you've previously disabled
Process Management
When Interlude detects a build process, you can:
- Let it play: The music will automatically stop when the build completes
- Dismiss temporarily: Click the status bar, select the process, and choose "Dismiss" - it won't play for this session but will track again next time
- Disable permanently: Click the status bar, select the process, and choose "Disable pattern permanently" - this pattern will never trigger again until you re-enable it
Configuration
Open VS Code Settings and search for "Interlude" to configure:
| Setting |
Default |
Description |
interlude.enabled |
true |
Enable or disable Interlude |
interlude.audioFile |
"" |
Currently selected song. Use the "Select Song" command to change. |
interlude.songLibrary |
[] |
Additional songs (URLs or local paths) to add to the built-in library |
interlude.processPatterns |
See below |
Process names or command patterns to watch for |
interlude.excludePatterns |
See below |
Patterns to exclude (watch modes, dev servers, daemons) |
interlude.disabledPatterns |
[] |
Patterns you have permanently disabled (managed via the status bar menu) |
interlude.minimumRuntimeSeconds |
5 |
Minimum runtime before music starts |
interlude.pollIntervalMs |
1000 |
How often to check for processes (ms) |
interlude.volume |
0.05 |
Audio volume (0.0 to 1.0). Use "Set Volume" command for easier control. |
interlude.fadeInDurationMs |
1000 |
Fade-in duration (ms) |
interlude.fadeOutDurationMs |
500 |
Fade-out duration (ms) |
Default Process Patterns
The extension watches for 80+ build commands by default, including:
| Category |
Commands |
| Containers |
docker build, docker-compose build, buildx, podman build |
| Build Systems |
make, cmake, ninja, bazel build, buck build, meson compile |
| Go |
go build, go test, go install, go mod download |
| Rust |
cargo build, cargo test, cargo install, rustc |
| Node.js |
npm run build, npm install, npm ci, npm test, yarn, pnpm, bun |
| Deno |
deno compile, deno test |
| Bundlers |
webpack --mode production, vite build, rollup -c, esbuild --bundle, parcel build |
| Frameworks |
next build, nuxt build, nx build |
| JVM |
gradle build, gradlew build, mvn compile/package/install, sbt compile, lein compile |
| .NET |
dotnet build/test/publish, msbuild |
| Python |
pip install, poetry install, pdm install, pytest, pyinstaller |
| Ruby |
bundle install, rake, gem install |
| PHP |
composer install |
| Mobile |
xcodebuild, fastlane, flutter build, react-native run, expo build |
| Other |
swift build, zig build, mix compile/test (Elixir), stack/cabal build (Haskell) |
| C/C++ |
gcc, g++, clang, clang++, vcpkg install, conan install |
Default Exclusion Patterns
These patterns are excluded to avoid triggering on watch modes and dev servers:
- Watch flags:
--watch, -w
- Dev servers:
serve, dev, start
- Webpack:
webpack-dev-server, webpack serve
- Vite:
vite dev, vite preview
- Next.js:
next dev, next start
- Nuxt:
nuxt dev, nuxt preview
- Node watchers:
nodemon, ts-node-dev, tsx watch
- Turbo:
turbo watch, turbo dev
- TypeScript:
tsc --watch, tsc -w
- Rollup:
rollup --watch, rollup -w
- Parcel:
parcel serve, parcel watch
- Cargo:
cargo watch
- Go:
go run
- Python servers:
flask run, uvicorn, gunicorn
- Rails:
rails server, rails s
- PHP:
php artisan serve
- Angular:
ng serve, angular serve
Commands
Access these via the Command Palette (Ctrl+Shift+P / Cmd+Shift+P):
- Interlude: Show Menu - Open the status bar menu
- Interlude: Toggle On/Off - Enable or disable the extension
- Interlude: Select Song from Library - Pick a song from your library (built-in + custom)
- Interlude: Set Volume - Choose volume level (5% to 100%)
- Interlude: Select Audio File - Add a local audio file to your library
- Interlude: Set Audio URL - Add a URL to your library
- Interlude: Test Audio Playback - Test that audio is working (plays for 5 seconds)
- Interlude: Show Status - Show current status and tracked processes
Audio Playback
Interlude uses native system audio commands for reliable playback without browser restrictions:
- macOS: Uses
afplay
- Windows: Uses PowerShell with Windows Media Player
- Linux: Uses
ffplay, mpv, paplay, or aplay (whichever is available)
Audio files from URLs are downloaded and cached locally for faster subsequent playback.
Built-in Songs
Interlude comes with 6 royalty-free songs from Archive.org:
- Kevin MacLeod - Aces High
- Kevin MacLeod - Presenterator
- Elevator Music Bossa Nova
- 8-bit Bossa
- Scott Joplin - The Entertainer
- Kevin MacLeod - Corncob
Changing Songs
Use the Select Song option in the status bar menu or run "Interlude: Select Song from Library" to:
- Choose from built-in songs
- Add local audio files
- Add songs from URLs
Songs you add are saved to your library and persist across sessions.
Adjusting Volume
Use the Set Volume option in the status bar menu or run "Interlude: Set Volume" to choose from preset levels (5% to 100%). Volume changes apply immediately if music is playing.
How It Works
- The extension polls the system for running processes at a configurable interval
- When a process matching one of the configured patterns is found (and doesn't match exclusion patterns), it starts tracking it
- Process trees are deduplicated - if a parent build process spawns child processes that also match, only the parent is tracked
- If the process runs longer than the minimum runtime threshold, music starts playing via native audio commands
- When all tracked processes end, the music fades out
- Click the status bar item to manage tracked processes or permanently disable patterns
Limitations
Dev Containers & Remote Sessions
Interlude does not work in:
- Dev Containers
- Remote SSH sessions
- GitHub Codespaces
- Other remote development environments
Why? Interlude uses native audio commands (afplay, ffplay, mpv, etc.) to play sound. In remote environments, these commands run on the remote host or container—not your local machine. Since containers and remote servers typically don't have audio hardware or access to your speakers, no sound is produced.
Workaround: Install the extension in a local VS Code instance. The extension will detect builds running locally and play audio through your computer's speakers.
Troubleshooting
No sound on Linux
Make sure you have one of the following audio players installed:
ffplay (part of ffmpeg)
mpv
paplay (part of pulseaudio-utils)
aplay (part of alsa-utils)
False positives
If Interlude keeps triggering for a process you don't want:
- Click the status bar item
- Select the process
- Choose "Disable pattern permanently"
Alternatively, add patterns to interlude.excludePatterns in settings.
Process detected multiple times
Interlude automatically deduplicates process trees. If you're still seeing duplicates, check if the processes have different command patterns - each unique pattern match is tracked separately.
License
MIT License
Contributing
Contributions welcome! Clone the repository and run npm install to get started.
Acknowledgments
- Music by Kevin MacLeod (incompetech.com) licensed under CC BY 4.0
- "8-bit Bossa" and other tracks licensed under CC0 1.0 (public domain)
- Thanks to everyone who has ever waited for a Docker build to finish
| |