Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ on:
release_tag:
description: Version tag matching source/host/Cargo.toml
type: string
default: v0.3.0
default: v0.4.0
pull_request:
paths:
- source/host/Cargo.toml
- .github/workflows/release.yml
push:
tags: ['v*']
permissions:
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 9 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,15 @@ Give your old CDJs a makeover! OneLibraryCompanion (OLC) reads Rekordbox One Lib

OLC runs on Mac or Raspberry Pi, alongside your players. You keep playback, cueing and mixing on the CDJs. You can use an iPad as the display or any other tablet by connecting to your Mac or RPi via the local network.

## What's new in 0.3.0
## What's new in 0.4.0

- **Automatic CDJ discovery:** find players on the local network and reconnect when the connection changes.
- **Browser audio preview:** listen to library tracks on your browser device, with artwork, waveforms and seeking.
- **Automatic set capture:** record performances automatically, split or join sessions, and keep reusable tracklists.
- **Headless Pi controls:** restart OLC, shut down the host and safely unmount USBs from MENU.
- **Connection reliability:** more stable local USB loading and automatic retries for failed analysis reads.
- Other various performance and reliability improvements.
- **Flexible display sizing:** automatic window fitting and five resolution presets.
- **Extra-wide CDJ STATUS:** side-by-side decks with switchable beat phase or reference waveform comparisons.
- **Clearer track information:** My Tag chips near the top, full metadata and a scrollable panel that fits the screen.
- **Sharper scaled waveforms:** rendering follows the display scale and window resizing.
- **Browse recovery:** temporary library-source connection errors clear after a successful retry.

[Detailed 0.3.0 release notes](docs/release-notes.md).
[Detailed 0.4.0 release notes](docs/release-notes.md).

## Key features

Expand Down Expand Up @@ -62,10 +61,10 @@ OLC captures your tracklist automatically while you play. Edit and share saved s
### Headless Raspberry Pi

1. Set up a Pi 4 or 5 with **64-bit Raspberry Pi OS Lite Bookworm or later**, network access and SSH. Set its hostname to **OLC** to use the address below.
2. Download the **0.3.0 ARM64 host package** from Releases. In its download folder, run these commands over SSH as the ordinary account that will run OLC:
2. Download the **0.4.0 ARM64 host package** from Releases. In its download folder, run these commands over SSH as the ordinary account that will run OLC:

```sh
sudo apt install ./onelibrarycompanion-host_0.3.0_arm64.deb
sudo apt install ./onelibrarycompanion-host_0.4.0_arm64.deb
sudo loginctl enable-linger "$(id -un)"
systemctl --user enable --now olc-host.service
hostname -I
Expand Down
135 changes: 77 additions & 58 deletions SOURCE-MANIFEST.sha256

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ When running the packaged Pi/Linux user service, MENU offers **Restart OLC** and

## Display

**Screen resolution** defaults to Automatic, which follows the available window or fullscreen space. Presets include 1280 × 800, 1920 × 720, 1920 × 1080, 1280 × 720 and 1024 × 768. Presets keep their aspect ratio and scale to fit. Wider proportions provide wider waveforms and library rows.

Extra-wide screens (aspect ratio at least 2.3:1, including 1920 × 720) default to **Side by side**, with CDJ 1 on the left and CDJ 2 on the right. Choose **Stacked** to retain vertically stacked waveforms. **Waveform comparison** selects a CDJ-3000-style beat phase meter or the other player’s compact reference waveform above each main waveform. Tap either comparison header to switch modes. The meter uses orange and cyan-blue horizontal rails, white beat ticks and red downbeats. Comparisons show unavailable when either live deck lacks fresh, reliable playback timing or is being moved manually. Compact reference waveforms have no phrase strip; the regular whole-track overview and phrase display remain below the track details.

Adjust waveform zoom, playhead position and color, motion smoothing and band emphasis. Choose elapsed or remaining time, and show or hide track overviews, phrase sections and extra details.

The CDJ STATUS zoom buttons and two-finger pinch change the visible window. Tapping a track's time switches elapsed/remaining time. **Restore defaults** resets display and filter preferences without deleting music or set history.
Expand All @@ -30,6 +34,10 @@ Choose **Show waveform performance** to inspect the last scrolling waveform meas

Waveform transfers use lossless packing when the host supports it and tolerate slow connections while data continues arriving. Failed downloads retry; changing tracks cancels the previous download. Small timing corrections are smoothed, including circular corrections within known loops. Relative phase refinement applies only to eligible normal forward non-master playback; it does not establish precise scratching or loop accuracy.

## Track information

Tap the **i** button on a deck waveform to open track information. My Tags appear as separate chips near the top, with category tooltips. Long metadata wraps without a two-line limit, and the panel scrolls within the available screen height.

## Library filters and track size

Choose which filters appear in BROWSE and arrange them in your preferred order. Set the BPM choices and include My Tag categories from your export.
Expand Down
6 changes: 3 additions & 3 deletions docs/distribution.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ Closing the window keeps OLC running. **Quit OLC** stops it. **Open at Login** i

## Raspberry Pi Desktop

Use a **Pi 4 or 5 with Raspberry Pi OS Bookworm or later, 64-bit**. Download both ARM64 `.deb` packages from the same release into one folder. For version 0.3.0, run this command in that folder:
Use a **Pi 4 or 5 with Raspberry Pi OS Bookworm or later, 64-bit**. Download both ARM64 `.deb` packages from the same release into one folder. For version 0.4.0, run this command in that folder:

```sh
sudo apt install ./onelibrarycompanion-host_0.3.0_arm64.deb ./onelibrarycompanion_0.3.0_arm64.deb
sudo apt install ./onelibrarycompanion-host_0.4.0_arm64.deb ./onelibrarycompanion_0.4.0_arm64.deb
```

Open OneLibraryCompanion from the applications menu. It has its own desktop window, with full-screen and login-startup options. A compatible touchscreen is supported; use the system's on-screen keyboard for typing. Mount the music USB through the operating system before selecting it in OLC.
Expand All @@ -43,7 +43,7 @@ To use a Pi without a monitor or a logged-in user, use 64-bit Raspberry Pi OS Li
Log in once over SSH as the ordinary Pi account that will run OLC. Quit any running OLC desktop app and disable its login-startup option before switching to the service. Download the host `.deb` from the release, then run the following in its folder (replace the version in the filename with your downloaded version):

```sh
sudo apt install ./onelibrarycompanion-host_0.3.0_arm64.deb
sudo apt install ./onelibrarycompanion-host_0.4.0_arm64.deb
sudo loginctl enable-linger "$(id -un)"
systemctl --user enable --now olc-host.service
loginctl show-user "$(id -un)" --property=Linger
Expand Down
64 changes: 20 additions & 44 deletions docs/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,58 +1,34 @@
# OneLibraryCompanion 0.3.0
# OneLibraryCompanion 0.4.0

Changes since the published Mac/Raspberry Pi 0.2.3 preview.
Changes since the published Mac/Raspberry Pi 0.3.0 preview.

## Automatic discovery and local USB loading
## Flexible display sizing

- Choose **Automatic discovery** in MENU to find CDJs on the local network. OLC reports the selected interface and searches again after network changes or disconnection. Manual IP connections and explicit interface selection remain available.
- Local OneLibrary USB loading now works through automatic discovery for players 1 and 2. Leave player number 4 free for OLC; Mac serving still requires Local USB Support. One local library is served per connection session.
- Overlapping load requests to the same player are rejected. OLC displays the local USB label for its served tracks.
- Automatic sizing follows the available window or fullscreen space. Presets offer 1280 × 800, 1920 × 720, 1920 × 1080, 1280 × 720 and 1024 × 768, preserving proportions while fitting the window.
- Extra-wide screens support side-by-side decks or the existing stacked layout. Browse, MENU and Set History adapt to the available space.
- Waveform canvas resolution follows the actual display scale and refreshes after window resizing.

## Browser audio preview
## Deck comparison

- Open **PLAY** in track details or hold a track title to open the browser player. Audio plays on the browser device, independently of the physical CDJs.
- The popup includes play/pause, waveform seeking, artwork, time, BPM, key, genre, My Tags, comments and library color. Exported phrase sections and hot/memory cue markers appear when available.
- Audio streams from host-attached or linked CDJ libraries, subject to browser format support. Local AIFF/AIFC files receive a temporary 44.1 kHz/16-bit WAV copy; original USB files and CDJ serving are unchanged.
- Analysis previews now cover local and automatically discovered sources, combine DAT/EXT/2EX records, and retain valid cues and phrases when waveform data is missing.
- Above each main waveform in the extra-wide side-by-side layout, switch between beat phase and the other deck's reference waveform by tapping the comparison header or changing MENU → Display.
- The phase meter shows orange/cyan lanes, white beat ticks, red downbeats and the master player. Each lane follows its own beat grid and tempo.
- Comparisons show unavailable when timing is stale, unreliable or under manual control. These displays do not establish hardware-validated phase accuracy.

## Automatic set capture
## Track information

- Capture runs on the host without pressing Start set. More than 45 seconds of continuous playback or looping qualifies a track; browser preview is excluded.
- More than five minutes without playback across the observed decks saves the session. Long tracks keep the session open; empty sessions are discarded.
- **Split set here** separates performances, **Finish set** saves immediately, and **Join previous set** joins adjacent captured sessions while preserving edited track orders.
- Start timestamps and repeat plays are retained. Short pauses, observation outages and restart recovery are handled without unnecessarily duplicating entries; uncertain observation boundaries are noted.
- My Tags appear as individual chips near the top of the CDJ track-information panel, with category tooltips.
- Long metadata is fully readable instead of being limited to two lines.
- The panel fits the available screen height and scrolls when needed.

See the [set history guide](set-history.md) for qualification, recovery and editing details.
## Reliability and diagnostics

## Headless Pi controls

- MENU offers confirmed **Restart OLC**, **Shut down host** and **Unmount USB** controls on the packaged Linux user service.
- Restart and shutdown block loaded OLC USB tracks unless fresh player status confirms they are stopped. Confirmation messages explain the emergency-loop and track-reload risk.
- USB unmounting briefly stops OLC, handles mounted partitions together, reports completion and never forcibly unmounts a busy volume. Devices containing system mounts are excluded.
- Shutdown and USB unmounting require the permissions described in the [installation guide](distribution.md#raspberry-pi-headless).

## Connection reliability

- Fixed a post-load disconnection caused by repeatedly copying cached waveform assets. Assets are cached once per track identity and serving packets drain without rebuilding the UI snapshot for every packet.
- Failed USB analysis reads retry automatically, and the host records the last disconnection reason and timestamp for diagnostics.

## Other performance and reliability improvements

- Lossless packed waveform transfers reduced sampled responses by approximately 93%, with older uncompressed clients still supported.
- Progress-aware downloads tolerate slow transfers, cancel superseded tracks, retry failures and display completed analysis promptly.
- Relative beat-phase refinement supports eligible normal forward non-master playback. Small timing corrections are smoothed; known loops use circular correction while preserving wraps. Relative refinement excludes loops, reverse and manual motion; physical accuracy remains to be fully validated.
- MENU can show recent waveform frame/drawing measurements and position-jump counts. iPad Safari supports launching OLC from a Home Screen icon without browser tabs or its address bar.
- Updated Pi packaging, network capabilities, dependencies, regression checks and setup documentation.
- Temporary Browse source-refresh errors clear after a successful retry, with a clearer reconnecting message.
- Explicitly configured diagnostic hosts can record a one-minute bug report covering CDJ timing, browser errors and waveform performance. Browser capture continues when leaving MENU, retries failed uploads and offers a local download fallback. Reports remain on the configured host; recording is disabled by default.

## Downloads and setup

- Apple Silicon: `OneLibraryCompanion-0.3.0-macos-arm64.dmg` or `.zip`.
- Intel Mac: `OneLibraryCompanion-0.3.0-macos-x86_64.dmg` or `.zip`.
- Raspberry Pi Desktop: install both `onelibrarycompanion-host_0.3.0_arm64.deb` and `onelibrarycompanion_0.3.0_arm64.deb`.
- Pi headless: install the host package, enable lingering and the user service, then open the Pi's network address from another device. Configure local USB mounting at boot.

Mac requires macOS 13+; Pi requires 64-bit Raspberry Pi OS Bookworm or later. Mac packages are ad-hoc signed and not notarized. Reinstall **Local USB Support** after updating the Mac app.
Apple Silicon and Intel Mac downloads include DMG and ZIP packages. Raspberry Pi downloads include ARM64 host and desktop Debian packages. Mac requires macOS 13+; Pi requires 64-bit Raspberry Pi OS Bookworm or later. Mac packages are ad-hoc signed and not notarized. Reinstall **Local USB Support** after updating the Mac app.

Stop players using OLC-served tracks before updating packages or restarting the host. Keep OLC running, the host awake and the USB attached during playback.
Stop players using OLC-served tracks before updating packages or restarting the host; loaded tracks may require reloading afterward.

[Installation and headless setup](distribution.md) · [Local USB and transcoding](local-usb.md) · [Compatibility and limits](compatibility.md).
[Installation and headless setup](distribution.md) · [Display settings](configuration.md#display) · [Compatibility and limits](compatibility.md).
4 changes: 2 additions & 2 deletions source/desktop/macos/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
<key>CFBundleExecutable</key><string>OLC</string>
<key>CFBundleIconFile</key><string>OLC</string>
<key>CFBundlePackageType</key><string>APPL</string>
<key>CFBundleShortVersionString</key><string>0.3.0</string>
<key>CFBundleVersion</key><string>8</string>
<key>CFBundleShortVersionString</key><string>0.4.0</string>
<key>CFBundleVersion</key><string>9</string>
<key>LSMinimumSystemVersion</key><string>13.0</string>
<key>NSHighResolutionCapable</key><true/>
<key>NSLocalNetworkUsageDescription</key><string>OLC connects to your CDJs and shares its interface with devices on your local network.</string>
Expand Down
2 changes: 1 addition & 1 deletion source/host/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "pioneer-companion-host"
version = "0.3.0"
version = "0.4.0"
edition = "2024"
license = "GPL-3.0-only"
[lib]
Expand Down
Loading
Loading