Skip to content

feat(xml): export device libraries as Rekordbox XML - #254

Open
snkk2x-collab wants to merge 3 commits into
Holzhaus:xml-improvementsfrom
snkk2x-collab:codex/export-rekordbox-xml-clean
Open

feat(xml): export device libraries as Rekordbox XML#254
snkk2x-collab wants to merge 3 commits into
Holzhaus:xml-improvementsfrom
snkk2x-collab:codex/export-rekordbox-xml-clean

Conversation

@snkk2x-collab

@snkk2x-collab snkk2x-collab commented Jun 18, 2026

Copy link
Copy Markdown

Closes #127.

Summary

  • add document_from_device_export to build a DJ_PLAYLISTS document from PIONEER/rekordbox/export.pdb
  • export collection metadata, file://localhost locations, TrackID-keyed playlists, beatgrid TEMPO entries, and cue POSITION_MARK entries from matching ANLZ files
  • add rekordcrate export-xml <EXPORT_PATH> [OUTPUT_FILE] for writing the generated XML
  • add fixture-based integration coverage over data/complete_export/demo_tracks
  • add unit coverage for hot cue and memory loop serialization into Rekordbox POSITION_MARK elements, including Num, Type, Start, End, and unsupported hot cue filtering

Validation

  • rustfmt src/pdb/mod.rs src/xml.rs src/main.rs tests/test_xml_export.rs
  • cargo test

Notes

The repository fixture data does not include real hot cues in data/complete_export/demo_tracks, so the integration fixture primarily covers the full export path, track metadata, playlists, and beatgrid TEMPO entries. The added XML unit tests cover the hot cue and memory loop POSITION_MARK behavior directly.

I do not have access to a mid-2010s CDJ for the optional hardware/video proof described in #127, so this PR focuses on a deterministic implementation and test coverage inside the repository.

@acrilique acrilique left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest doing any xml-related PRs against the xml-improvements branch (PR #130 ) and not main. Haven't reviewed this one entirely but there seems to be room for improvement.

Comment thread src/pdb/mod.rs Outdated
Comment on lines +1880 to +1891
#[must_use]
pub fn comment(&self) -> &DeviceSQLString {
&self.offsets.comment
}

/// Name of the mix.
#[must_use]
pub fn mix_name(&self) -> &DeviceSQLString {
&self.offsets.mix_name
}
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the point of these accessors? I don't see any advantage vs just making the fields public. They're currently not public just bc they aren't used anywhere afaik

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in 5d7e626: I removed the extra comment() / mix_name() accessors, made the corresponding TrackStrings fields public, and changed XML export to read track.offsets.comment / track.offsets.mix_name directly.

Validation: cargo test passes locally.

@snkk2x-collab
snkk2x-collab force-pushed the codex/export-rekordbox-xml-clean branch from facc9ee to 29815f3 Compare June 20, 2026 11:18
@snkk2x-collab
snkk2x-collab changed the base branch from main to xml-improvements June 20, 2026 11:18
@snkk2x-collab

Copy link
Copy Markdown
Author

Thanks for the direction. I retargeted this PR to xml-improvements and pushed a follow-up test commit covering exported position marks.

Current branch state:

  • base: xml-improvements
  • latest commits: c87293b feature implementation, 29815f3 XML export coverage
  • local validation was run before the update and the new test coverage is included in src/xml.rs.

Ready for another review when you have time.

@snkk2x-collab

Copy link
Copy Markdown
Author

Hi, I updated the PR to target the xml-improvements branch and verified the export tests locally. Before I spend more time adding hardware/import proof, can you confirm whether this PR is still eligible for the $200 bounty on #127 if accepted?

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.

$200 bounty for Rekordbox export with hot cues & BPM

2 participants