Skip to content

Conversation

@chrisle
Copy link
Contributor

@chrisle chrisle commented Jun 22, 2022

[v0.14.0] - 2026-01-16

Changed

  • Optimized database hydration with SQLite transactions (10-100x faster)
  • Added prepared statement caching for bulk inserts
  • Batched progress updates every 100 rows instead of every row
  • Fixed NFS buffer handling for reliable database streaming
  • Added error handling for media slot queries (returns null instead of throwing)

Added

  • Optional profiling via NP_PROFILE_HYDRATION=1 environment variable
  • Optional debug logging via NP_PRODJLINK_TAG=1 environment variable

[v0.13.0] - 2025-12-15

Added

  • CDJ-3000 support with absolute position packet handling
  • 6-channel on-air support for DJM-V10 mixers
  • Extended ANLZ features (PCO2, PSSI, enhanced waveforms)
  • Full DJ Link startup protocol (optional, for CDJ-3000 compatibility)
  • Socket reuse option for Rekordbox coexistence
  • Configurable virtual CDJ name via network.configure({ vcdjName })
  • Configurable Sentry DSN via PROLINK_CONNECT_SENTRY_DSN environment variable
  • Optional telemetry for performance monitoring

Changed

  • Require Node 20 minimum version
  • Replaced js-xdr internal imports with local implementations for better bundling
  • Virtual CDJ now identifies as "Now Playing" on the ProLink network
  • Bumped all dependencies to latest versions

Fixed

  • TypeScript type union order in field declarations
  • Fixed a typo in ItemType.OriginalArtist (was misspelled as OrigianlArtist)
  • Network handling improvements for stability
  • Lint errors and test compatibility

@vercel
Copy link

vercel bot commented Jun 22, 2022

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Updated
prolink-connect ✅ Ready (Inspect) Visit Preview Jul 4, 2022 at 9:15PM (UTC)

@chrisle chrisle changed the title Download files in 8k instead of 2k chunks. Add getFile(). Separate closing UDP sockets from device connections. Jul 4, 2022
@vercel
Copy link

vercel bot commented Dec 14, 2025

@chrisle is attempting to deploy a commit to the evanpurkhiser's projects Team on Vercel.

A member of the Team first needs to authorize it.

@chrisle chrisle force-pushed the main branch 4 times, most recently from d21ff78 to 801565b Compare December 23, 2025 01:23
Removes NP_PRODJLINK_TAG debug logging that was added for development.
The status emitter now operates silently without verbose console output.
Applies prettier formatting to telemetry utility functions.
Fixes curly brace style for single-line if statements, adds comments
to intentional no-op functions, and removes unnecessary async keyword.
@chrisle chrisle changed the title Add getFile(). Separate closing UDP sockets from device connections. I fix yur codes Jan 16, 2026
Adds ability to extract embedded artwork directly from audio files on CDJ
media (USB/SD) via NFS, enabling high-resolution artwork retrieval instead
of relying on rekordbox thumbnails.

Features:
- NFS partial/range reads via fetchFileRange() for efficient byte fetching
- Parsers for ID3v2 (MP3), MP4/M4A, FLAC, and AIFF with embedded ID3
- FileReader abstraction for testability (NFS and Buffer sources)
- Database integration via getArtworkFromFile() method
- Support for JPEG, PNG, and GIF artwork formats

Supported file formats:
- MP3 with ID3v2.3/2.4 APIC frames
- M4A/MP4 with covr atoms
- FLAC with PICTURE metadata blocks
- AIFF with embedded ID3 chunks
- getArtwork() is now the primary method for artwork (extracts from audio file)
- getArtworkThumbnail() gets low-res thumbnails from rekordbox database
- getArtworkFromFile() is deprecated, calls getArtwork()
Adds a new passive monitoring mode that uses packet capture (pcap) instead
of binding to UDP ports. This enables:

- Running alongside Rekordbox without port conflicts
- USB-connected device support (XDJ-XZ, XDJ-AZ)
- Non-intrusive monitoring (devices don't know we exist)
- RemoteDB queries for Rekordbox Link track metadata
- AlphaTheta device auto-detection via USB and Ethernet (MAC prefix)

New exports: `bringOnlinePassive()`, `PassiveProlinkNetwork`, and
`findAlphaThetaInterface()`. Includes example script for testing.
Adds mock handler for Kaitai Struct parser files to prevent import
errors during tests. Updates jest config to handle these binary parsers.
Adds unit tests for local database functionality including:

- ANLZ file parsing (cue points, waveforms, beat grids)
- SQLite database loading and validation
- OneLibrary adapter for browsing playlists and tracks
- Edge cases and error handling

Includes test fixtures with a sample OneLibrary database and
helpers for creating test data.
Applied consistent code formatting across the codebase and added TypeScript interfaces for the OneLibrary SQLite schema. Also made bringOnlinePassive synchronous since it doesn't perform any async operations.

- New onelibrary-schema.ts with TypeScript interfaces for exportLibrary.db
- Import ordering sorted alphabetically
- Consistent line wrapping and formatting
- bringOnlinePassive now returns synchronously
The cap module is required for passive packet capture mode but not for normal active mode. Moving it to optionalDependencies allows prolink-connect to be installed even if cap fails to build (e.g., missing libpcap).
All-in-one units don't broadcast mediaSlot info packets like standalone
CDJs do. Added getWithoutMedia() fallback that attempts to fetch the
rekordbox database via NFS directly when no media info is cached.

Also added debug logging for mediaSlot broadcasts and unknown packet types.
…k networks

Added new function that returns all detected AlphaTheta/Pioneer interfaces instead of just the first one. This enables users to choose which interface to use when multiple DJ devices are connected via different methods (USB and Ethernet). Includes tests.
Updated main README to highlight AlphaTheta/all-in-one controller support, OneLibrary, 6-channel support, and other new features. Added comprehensive passive mode documentation explaining interface detection methods and usage examples. Added Thanks To section crediting contributors.
Remove NP_PRODJLINK_TAG and NP_PROFILE_HYDRATION environment
variable checks and associated console.log debug output that
was added for NowPlaying development but doesn't belong in
the library.
Introduced DatabaseAdapter interface to support multiple database formats:
- MetadataORM (existing rekordbox PDB format)
- OneLibraryAdapter (new OneLibrary format)

Added database preference setting ('auto', 'onelibrary', 'rekordbox') to
control which format to use when both are available. The adapter provides
a unified interface for track/artist/album lookups regardless of format.
Add research notes covering absolute position tracking, all-in-one unit
support, extended ANLZ data, full startup sequences, and on-air channel
detection.
Update package name, npm bin entry, README badges, and all import
examples to use the new alphatheta-connect name. This reflects the
rebranding of Pioneer DJ to AlphaTheta Corporation.
Updated package name, README description, and CLI binary name to reflect the AlphaTheta branding.
Add extractMetadataFromDevice() function that extracts complete metadata
(title, artist, album, BPM, key, artwork) from audio files via NFS by
reading only file headers instead of downloading entire files.

- Create src/metadata.ts with extractMetadataFromDevice function
- Add extractFullMetadata for raw NFS file data
- Export new functions from package index
- Add metadata-connect as dependency for format parsing
- Add related projects section to README
Split the 900-line OneLibrary database adapter into separate modules
for better maintainability:

- onelibrary/encryption.ts - SQLCipher key derivation
- onelibrary/connection.ts - Database connection setup
- onelibrary/types.ts - Entity type interfaces
- onelibrary/adapter.ts - Main adapter class
- onelibrary/index.ts - Re-exports for clean imports

Original onelibrary.ts now re-exports from the folder for backward
compatibility. All existing imports continue to work unchanged.
Split the 670-line rekordbox database adapter into separate modules
for better maintainability:

- rekordbox/types.ts - Type definitions and interfaces
- rekordbox/entity-creators.ts - PDB row to entity converters
- rekordbox/anlz-parsers.ts - ANLZ section parsing functions
- rekordbox/hydrator.ts - Database hydration class
- rekordbox/table-mappings.ts - PDB table type mappings
- rekordbox/index.ts - Main API functions and re-exports

Original rekordbox.ts now re-exports from the folder for backward
compatibility. All existing imports continue to work unchanged.
Updated the `package-lock.json` and `yarn.lock` files to reflect the latest dependencies. This ensures that the project uses the correct versions of packages for consistent builds.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant