Serato DJ crate synchronization tool — automatically sync your filesystem folders to Serato crates and more.
Based on serato-sync by Roman Alekseenkov.
- Folder → Crate Mapping: Mirror your directory structure directly to Serato crates
- Smart Crate Writing: Only updates
.cratefiles if content has changed, preserving disk I/O - Robust Path Normalization: Intelligently handles Unicode (NFC/NFD) and absolute/relative path differences
- Smart Deduplication: Prevents duplicate tracks using Unicode-aware filename matching
- Pre-Sync Backup: Automatically backs up
_Serato_folder with preserved timestamps - Parent Crate Support: Add synced folders as subcrates under existing Serato crates
- Alphabetical Crate Sorting: Automatically sort crates A–Z in Serato via
neworder.pref - Duplicate File Scanner: Logs duplicate files (same name + size) to
logs/ - Duplicate File Mover: Moves duplicate files to
cdd-sync-pro/dupes/<timestamp>/(keep newest or oldest) - Auto-Create Missing Folders: Prompts to create
_Serato_or parent crate if missing - Broken Filepath Fixer: Automatically repairs broken track paths in existing crates and database V2
- Session Fixer: Standalone tool to fix broken paths in Serato
.sessionhistory files - GUI Config Window: Dark-themed interactive config panel with path fields, sync options, and live log output
- Dry-Run Mode: Preview a full sync without writing anything to disk (
--dry-runCLI flag) - Timestamped Logs: All logs saved to
<volume>/cdd-sync-pro/logs/
-
Download the
distr/cdd-sync-pro/directory -
Edit
cdd-sync.propertiesto configure your paths:music.library.filesystem=/path/to/your/music music.library.database=/Volumes/YourDrive/_Serato_
-
Run:
java -jar cdd-sync-pro.jar
| Flag | Mode | Description |
|---|---|---|
| (none) | GUI / CLI | Normal sync |
--dry-run |
CLI only | Preview sync — logs all actions with [DRY RUN] prefix, writes nothing to disk |
Example:
java -jar cdd-sync-pro.jar --dry-run| Property | Description | Default |
|---|---|---|
mode |
gui or cmd |
gui |
music.library.filesystem |
Path to your music content (not Serato folder) | Required |
music.library.database |
Path to _Serato_ folder |
Required |
music.library.database.backup |
Create backup before sync | true |
music.library.database.clear-before-sync |
Clear existing crates first | false |
crate.parent.path |
Parent crate for synced folders | None |
database.fix.broken.paths |
Fix broken filepaths in crates & database | false |
database.skip.existing.tracks |
Skip tracks already in Serato | true |
database.dupe.detection.mode |
filename, path, or off |
filename |
crate.sorting.alphabetical |
Sort crates A–Z in Serato | false |
harddrive.dupe.scan.enabled |
Log duplicate files on disk | false |
harddrive.dupe.move.enabled |
keep-newest (move older), keep-oldest (move newer), or false |
false |
harddrive.dupe.detection.mode |
Strategy: name-only, name-and-size, or off |
off |
Requires Java 11 and Apache Ant.
macOS (using Homebrew)
brew install openjdk@11 ant| Target | Description |
|---|---|
ant all |
Clean and build both cdd-sync-pro and session-fixer |
ant compile |
Compile all Java source files |
ant jar |
Package cdd-sync-pro into a JAR |
ant session-fixer-jar |
Package session-fixer into a JAR |
ant run |
Build and run cdd-sync-pro |
ant session-fixer-run |
Build and run session-fixer |
ant test |
Compile and run unit tests (JUnit 5) |
ant clean |
Remove all generated build artifacts |
- Main Sync Tool:
distr/cdd-sync-pro/cdd-sync-pro.jar - Session Fixer:
distr/session-fixer/session-fixer.jar
cdd-sync-pro/
├── shared/src/ # Shared Java source (used by both apps)
│ ├── cdd_sync_backup.java # Timestamped backups of the _Serato_ folder
│ ├── cdd_sync_binary_utils.java # Big-endian I/O + NFC path normalization helpers
│ ├── cdd_sync_database.java # Parses the Serato database V2 file
│ ├── cdd_sync_database_fixer.java # Updates track paths directly in database V2
│ ├── cdd_sync_exception.java # Recoverable custom exception
│ ├── cdd_sync_fatal_exception.java # Unrecoverable custom exception
│ ├── cdd_sync_input_stream.java # Helper for reading Serato's big-endian format
│ ├── cdd_sync_log.java # Logging utility for console, GUI, and file output
│ ├── cdd_sync_log_window.java # GUI component for real-time log display
│ ├── cdd_sync_log_window_handler.java# java.util.logging handler bridging to GUI log window
│ ├── cdd_sync_media_library.java # Scans the filesystem for supported media files
│ └── cdd_sync_output_stream.java # Helper for writing Serato's big-endian format
├── cdd-sync-pro/src/ # Main sync tool source files (silo)
│ ├── cdd_sync_main.java # Primary entry point for the sync application
│ ├── cdd_sync_config.java # Loads and manages configuration from cdd-sync.properties
│ ├── cdd_sync_crate.java # Core logic for reading and writing Serato .crate files
│ ├── cdd_sync_crate_fixer.java # Scans crates and repairs broken track paths
│ ├── cdd_sync_crate_scanner.java # Scans existing crates to index tracks for deduplication
│ ├── cdd_sync_database_entry_selector.java # Date-based entry selection for path fixes
│ ├── cdd_sync_dupe_mover.java # Scans for duplicate files and moves them to safety
│ ├── cdd_sync_file_utils.java # General file system utility methods
│ ├── cdd_sync_library.java # Builds the crate hierarchy mirroring the filesystem
│ ├── cdd_sync_pref_sorter.java # Manages alphabetical crate sorting via neworder.pref
│ ├── cdd_sync_pro_window.java # Dark-themed GUI config & control window (SwingWorker)
│ └── cdd_sync_track_index.java # Unified index for track lookups and deduplication
├── session-fixer/src/ # Session-fixer standalone tool (silo)
│ ├── session_fixer_main.java # Entry point
│ ├── session_fixer_config.java # Configuration loader
│ ├── session_fixer_core_logic.java # Path fixing logic
│ └── session_fixer_parser.java # .session file parser
├── s3-smart-sync/ # S3 sync companion tool (Python)
├── md/ # Internal docs (CODEBASE_GUIDE, CHANGELOG, TODO, etc.)
├── test/ # JUnit 5 unit tests
├── lib/ # Test dependencies (JUnit platform JAR)
├── build.xml # Ant build script
├── out/ # Compiled classes (generated)
├── distr/ # Distribution artifacts (generated)
└── README.md
- Backup: Creates timestamped backup alongside your
_Serato_folder - Scan: Reads your music library directory structure
- Fix Paths (optional): Repairs broken filepaths in existing crates and updates database V2
- Deduplicate: Skips tracks already in Serato database
- Build Crates: Creates
.cratefiles mirroring your folder structure (updates only if changed) - Sort (optional): Generates
neworder.preffor alphabetical crate ordering