Features

Everything you used to do manually.

From the first import to the final file — Kombiner handles the tedious parts of every stage so you can spend more time on the music.

Available now

One library, every source.

Spotify, Tidal, Deezer, SoundCloud, local folders — one track table, no duplicates, auto-updated in the background.

  • Auto-import from various sources
  • Automatic deduplication across sources
  • Search across title, artist, genre, label, BPM

Adding a new source is a plugin. No app update required.

Available now

All metadata — filled in.

Data collected from Beatport, Spotify and YouTube — all merged into one table.

  • Enriches simultaneously
  • BPM and key detected from the audio file itself
  • Inline editing — override any field, single or bulk

Plugins store results independently — run them in any order.

Available now

Hear it.

Listen to any track - whether you have it on disk or not.

  • Full player with seek bar, volume, and left-right jog-wheel alike scroll
  • Hover-to-preview feature: audio starts automatically at 1:00
  • MP3, FLAC, WAV, AIFF, AAC, OGG — pure-Rust audio decoding, no codecs
Available now

Buy and download without leaving the app.

Kombiner handles the last step: getting the file. Buy from Beatport, convert formats.

  • Open any linked storefront in one click from the track row
  • Download free and pre-owned tracks directly to your library folder
  • Format conversion: FLAC → MP3, WAV → AIFF, any combination
  • Acquire queue: batch-process a whole set's worth of tracks at once
Available now

Harmonic mixing AI playlist builder.

Tell Kombiner "60 minutes of progressive house, 122–128 BPM, small bar." It builds the set. You play it.

  • Camelot / Open Key harmonic compatibility
  • BPM-range and genre filtering
  • "Next track" recommendations while building a set [coming soon]
On the roadmap

Push directly into DJ Software.

When your library is ready, Kombiner exports it with all metadata intact.

  • Rekordbox XML export with playlists, crates, and full metadata
  • Traktor NML and Serato crate export via plugins
  • Only exports tracks with actual files — no broken paths
  • ID3 / Vorbis tags written back to the file, portable everywhere
Built on an open plugin system

Every feature is a plugin.
Extend anything.

Kombiner's core is intentionally minimal. Every import source, every enrichment service, every store integration is a small script. Install community plugins, write your own, or swap out any service without waiting for an update.

Runs continuously

Import plugins

Poll any source on a schedule. When a new track appears, Kombiner imports it automatically. No manual sync.

  • local-import watches a folder on disk
  • spotify-import polls your liked songs
  • tidal-import polls your liked songs
  • deezer-import polls your liked songs
  • soundcloud-import polls your liked songs
Per-plugin, multi-pass

Enrich plugins

Each enrich plugin writes its results independently. Install a new Spotify plugin today and run it against your entire existing library — your Beatport enrichment stays untouched.

  • local-enrich BPM, key, genre, energy
  • beatport-enrich BPM, key, genre, year, label
  • spotify-enrich listens count
  • youtube-enrich views count
First found

Acquire plugins

Go from wishlist to file without touching a browser. Optimize your budget choosing the best price for each track. Just download tracks you already own.

  • beatport-acquire adds tracks to the cart, opens checkout, downloads
  • bandcamp-acquire adds tracks to the cart, opens checkout, downloads
Coming v0.4

Export plugins

Export plugins take your library — or a filtered subset — and write it in the format your DJ software expects. Playlist structure, cue points, metadata tags: all preserved exactly.

  • rekordbox-xml Rekordbox XML export · roadmap
  • traktor-nml Traktor collection NML · roadmap
  • serato-crate Serato crate files · roadmap
// enrich_myservice/main.rhai
fn run_enrich(track) {
    let meta = http_get("https://api.myservice.com/track/" + track.isrc);
    #{
        bpm:   meta["bpm"],
        key:   meta["key"],
        label: meta["label"],
    }
}

Scripts are sandboxed — they can't access system resources or each one data.
This is a high-level simplified example.