Skip to content

Repository files navigation

Conduction

Conduct your mix, don't perform it.

Conduction is a programmable, extensible DJ engine for live performance. It treats human UI input, AI suggestions, plug-ins, and Lua scripts as equally valid instructions to a single Conductor layer — so the DJ can choreograph a set instead of frantically reaching for every knob.

  • License: MIT
  • Status: in-development (pre-1.0) — the first public build is tagged in-dev 1.0
  • Platform: macOS (primary), Linux, Windows
  • Built with: Rust + Tauri v2 + React 18 + TypeScript
  • 日本語版: README_ja.md

Why Conduction?

Most DJ software treats automation as an afterthought — you record an Ableton clip, or you bind a MIDI controller, or you fight a piano-roll. Conduction inverts this: every parameter change is a first-class instruction, whether it comes from a fader you touched, a Cue you tagged, a setlist transition, or a Lua function. They all flow through the same Conductor, so handing a section to automation and taking it back is just a context switch — not a workflow.

Core ideas

  1. One Conductor, many sources. Faders, AI, scripts, and Cue matching all write to the same parameter bus. Override / Resume / Commit are universal verbs.
  2. Automation templates are programs. Visual timeline, node graph, or Lua script — they compile to the same Template AST.
  3. Cues are typed.Drop / Intro / Breakdown / Outro have semantics, so "the next track that mixes here" is a query, not a guess.
  4. Setlists are documents. Export to .cset, share with a collaborator, re-open on another machine.

Features

Mixer

  • Two decks with effective BPM tracking, master tempo (keylock), and ±6 / ±10 / ±16 % tempo range
  • 3-band EQ + filter + FX (reverb / delay / etc.) per deck
  • Crossfader, master, channel volumes, PFL (CUE bus) routing
  • Beat-snapped loops with bar-wise extend / shrink
  • 8 Hot Cues per track plus typed Cues (Drop / Intro / Breakdown / Outro …)

Library

  • Folder-scan import, BPM and Camelot-key detection, energy estimation, waveform cache
  • SQLite-backed (auto-migrated, currently schema v5)
  • MixSuggestion panel proposes the next track based on BPM / Key / Energy compatibility against typed Cues of the active deck

Automation Templates

Three editors, one underlying Template model:

  • Visual timeline — drag keyframes per target with linear / smooth / ease-in / ease-out curves
  • Node editorreact-flow graph of Source → Target pairs
  • Script (Lua) — write a real program. Lua is sandboxed and used as a code generator; it never runs on the audio thread.

Lua API (excerpt):

set_duration(16) -- barsset_direction("a_to_b") -- or "b_to_a"keyframe("crossfader", 0, -1.0, "linear")
keyframe("crossfader", 64, 1.0, "smooth")
each_bar(16, function(bar, beat)
localt=bar/16keyframe("deck_eq_low.A", beat,
lerp(1.0, 0.0, smoothstep(0, 1, t)), "linear")
end)

The Monaco-based editor ships with inline error markers, completion (Conduction API + prelude helpers + Lua keywords + math.*), syntax highlighting, and a slide-in docs panel.

Five built-in presets (linear_16bar, crossfade_outro_intro, eq_swap, filter_sweep, build_drop) come with their Lua source so they can be forked.

Setlists

  • Drag-reorder, per-transition duration, template assignment
  • .cset export / import (carries the setlist plus lightweight track metadata)
  • One-click "Load to Deck" from a setlist row

YouTube import (optional)

  • cargo build --features yt-download enables yt-dlp integration

Quick start

Full instructions: install.md. Full feature manual: usage.md.

# 1. Prerequisites# - rustup (Rust stable, pinned by rust-toolchain.toml)# - Node.js 20+ and npm# - macOS: xcode-select --install (needed by mlua vendored Lua)# - Linux: webkit2gtk / gtk3 / appindicator dev packages# 2. Clone and install
git clone https://github.com/xxvw/conduction.git
cd conduction
cd ui && npm install &&cd ..
# 3. Run in dev mode
npm run --prefix ui app:dev
# 4. Build a release bundle (.app / .dmg / .AppImage / .msi)
npm run --prefix ui app:build

Repository layout

conduction/
├── crates/
│ ├── conduction-core/ Data model (Track, Cue, Template, Deck)
│ ├── conduction-audio/ Audio engine (cpal)
│ ├── conduction-analysis/ BPM / key / energy detection
│ ├── conduction-conductor/ Template execution + Cue matching
│ ├── conduction-library/ SQLite persistence
│ ├── conduction-claude/ Claude CLI bridge (feature: claude-analysis)
│ ├── conduction-download/ yt-dlp bridge (feature: yt-download)
│ ├── conduction-export/ .cset serialization
│ ├── conduction-script/ Lua → Template compiler
│ └── conduction-app/ Tauri app (IPC commands)
└── ui/
├── design-system/ CSS variables, preview
└── src/ React + TS (screens / components / hooks)

Documentation


Releases

The first prebuilt artifact is published as in-dev 1.0. Find the macOS .dmg / .app.tar.gz on the Releases page.

The version string 0.1.0 in Cargo.toml will move to 0.2.0 once Phase 2 (live FX automation + scripting playback controls) ships. A 1.0.0 semver bump is reserved for the first non-in-dev release.


Contributing

Issues and pull requests are welcome. Before opening a PR:

  1. cargo fmt --all and cargo clippy --workspace --all-targets -- -D warnings
  2. cargo test --workspace
  3. cd ui && npx tsc --noEmit

For UI-touching changes, please attach before / after screenshots from the dev build.


License

MIT — see LICENSE.

About

Blueprint based conduction style dj software

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages