Skip to main content

max / audiofiles

git clone https://makenot.work/git/max/audiofiles.git git clone git@ssh.makenot.work:max/audiofiles.git git send-email --to audiofiles@patches.makenot.work

Project: Audiofiles by max

Name Size
/ .cargo/
/ crates/
/ dist/
/ docs/
/ scripts/
· .gitignore 641 B
· af-logo-1024.png 13.4 KB
· bento.toml 576 B
· Cargo.lock 174.2 KB
· Cargo.toml 3.7 KB
· CHANGELOG.md 3.6 KB
· clippy.toml 898 B
· CONTRIBUTING.md 12.1 KB
· icon.svg 1.4 KB
· LICENSE 4.4 KB
· README.md 5.6 KB
· rust-toolchain.toml 86 B
· synckit.toml 316 B

README

audiofiles

A sample manager with content-addressed storage and a virtual file system. Standalone desktop app built with Rust, egui, and SQLite.

Prerequisites

  • Rust (stable toolchain, 2024 edition)

No platform-specific audio libraries are required. Audio decoding uses Symphonia (pure Rust), SQLite is bundled via rusqlite, and the standalone app uses cpal for system audio output.

Build and Run

# Standalone app
cargo run -p audiofiles-app

# Standalone app -- import a folder on launch
cargo run -p audiofiles-app -- /path/to/samples

# Run all workspace tests
cargo test --workspace

# Train the ML classifier (developers only)
cargo run -p audiofiles-train -- /path/to/training-data

Workspace Architecture

Six crates:

CratePathRole
audiofiles-corecrates/audiofiles-core/Domain library. SQLite database, content-addressed store (SHA-256), audio decoding (Symphonia), analysis pipeline (loudness, BPM, key, spectral, classification), VFS, tag system, VP-tree similarity index.
audiofiles-browsercrates/audiofiles-browser/Shared egui UI. File list, detail panel, waveform display, search/filter, import wizard, analysis progress, export, themes.
audiofiles-appcrates/audiofiles-app/Standalone desktop app via eframe. System audio (cpal), drag-and-drop import, native drag-out to Finder/DAWs, system tray, CLI import, OTA updates.
audiofiles-synccrates/audiofiles-sync/Cloud sync via SyncKit. Pushes/pulls sample metadata, tags, and VFS structure across devices. E2E encrypted.
audiofiles-rhaicrates/audiofiles-rhai/Rhai scripting engine for device export profiles. Transforms sample metadata and file layout for hardware samplers.
audiofiles-traincrates/audiofiles-train/ML classifier training binary. Builds the random forest model from labeled sample data. Not shipped in the app.

Dependency flow: audiofiles-core is the leaf -> audiofiles-rhai and audiofiles-sync depend on core -> audiofiles-browser depends on core, sync, and rhai -> audiofiles-app depends on browser and core. audiofiles-train depends on core only.

Theme loading comes from makeover, published to crates.io. Shared libraries from ../../MNW/shared/: synckit-client (cloud sync SDK).

Features

Storage & Organization

  • Content-addressed storage: samples stored by SHA-256 hash, automatic deduplication
  • Virtual file system: organize samples in virtual directories independent of disk location, multiple VFS roots
  • Tag system: hierarchical dot-notation tags with auto-suggestions from analysis results
  • Smart folders: saved filter queries that update dynamically
  • Collections: cross-VFS sample groupings

Audio Analysis

  • Analysis pipeline: loudness (peak/RMS/LUFS), BPM detection, key detection, spectral analysis
  • ML classification: two-layer system: rule-based broad categories, then 200-tree random forest for drum sub-classification (94.4% accuracy on 4,343 samples)
  • Loop detection: identifies seamless loops via amplitude envelope analysis
  • Similarity search: VP-tree indexed fingerprinting for finding similar and duplicate samples (O(log n) lookup)
  • Waveform display: pre-computed peak data with click-to-seek playback

Search & Filtering

  • Text search: FTS5 indexed across filenames, tags, and metadata
  • Parameter filters: BPM range, duration range, key selector, classification category
  • Tag prefix matching: type a tag prefix to filter by hierarchy

Editing

  • Destructive editing: trim, fade in/out, normalize, reverse, gain adjust
  • Edit history: full undo/redo stack per sample
  • Bulk operations: bulk delete, move, rename, tag across selections
  • Rename engine: pattern-based renaming with tokens (name, bpm, key, index, etc.)

Device Export

  • Rhai export profiles: scriptable export for 14 hardware samplers: M8, Digitakt, Digitakt II, Octatrack, Model:Samples, SP-404 MKII, MPC, Polyend Tracker, Deluge, Blackbox, Volca Sample 2, OP-1, Circuit Rhythm, Maschine+

Playback & Integration

  • MIDI instrument: chromatic and multi-sample playback modes with 8-voice polyphony and ADSR envelopes
  • Native drag-out: drag samples from the file list directly to Finder, Desktop, or any DAW (macOS + Windows)
  • System tray: minimize to tray, quick access

Infrastructure

  • Cloud sync: cross-device sync of metadata, tags, and VFS via SyncKit (E2E encrypted, ChaCha20-Poly1305 + Argon2)
  • OTA updates: background update checker with consent dialog
  • Bundled themes: dark, light, and high-contrast variants in TOML format, from the shared makeover crate
  • Audio formats: WAV, FLAC, MP3, OGG, AIFF (via Symphonia, pure Rust)
  • Platforms: macOS, Windows, Linux (standalone, no backend required)

Key Paths

WhatWhere
Domain librarycrates/audiofiles-core/src/
ML classifier modelcrates/audiofiles-core/models/layer2_drum.json
Training binarycrates/audiofiles-train/
UI componentscrates/audiofiles-browser/src/
Desktop app shellcrates/audiofiles-app/src/
Device export profilescrates/audiofiles-rhai/plugins/bundled/
Architecturedocs/architecture.md

License

PolyForm Noncommercial 1.0.0