site 1.10.0: BPM x2 / /2 (bpmhalfdouble) in the builder, docs and Mods page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Thiemo TizianiandClaude Opus 5.5 committed 2026-10-21 08:56:03 +02:00
1 parent b388dc2739
commit c1fe1bf2dc
13 files changed
+88 -34

No files matched your search

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

+18 -2
View File
@@ -1,8 +1,15 @@
// Generated by tools/make_builder_data.py from tools/changelog.json and the mods' versions.
window.CDJ_VERSIONS = {
"site": "1.9.0",
"site": "1.10.0",
"date": "2026-10-21",
"log": [
{
"version": "1.10.0",
"date": "2026-10-21",
"changes": [
"New mod: BPM ×2 / ÷2 (bpmhalfdouble), the track's BPM and beat grid doubled or halved from the deck, kept on the USB stick."
]
},
{
"version": "1.9.0",
"date": "2026-10-21",
@@ -198,7 +205,7 @@ window.CDJ_VERSIONS = {
"cuenames": "0.1.1",
"endwarn": "0.1.0",
"played": "0.3.1",
"bpmhalfdouble": "0.1.0",
"bpmhalfdouble": "0.2.0",
"wide_waveform": "0.1.0",
"credit": "1.1.0"
},
@@ -409,6 +416,15 @@ window.CDJ_VERSIONS = {
"The big waveform 624 columns wide instead of 536, to the right edge; the extra columns are ahead of the playing position. The ZOOM/GRID wheel replaced by a grey ZOOM / GRID box over the BPM display."
]
}
],
"bpmhalfdouble": [
{
"version": "0.2.0",
"date": "2026-10-21",
"changes": [
"TAG TRACK held + CALL ◀ / ▶ halves or doubles the loaded track's BPM and beat grid; the track is loaded again with it, so display, beat ticks, bars, quantize and Pro DJ Link follow. Kept on the USB stick in PIONEER/PIONAARR.BPM. Results under 60 or over 240 BPM refused."
]
}
]
}
};
+6 -6
View File
@@ -6,12 +6,12 @@
<title>Pionaarr Mods Builder</title>
<meta name="description" content="Build your own modded C900NXS.UPD in the browser: upload the official 1.31 update, tick the mods, download the file. Nothing leaves your computer.">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.9.0">
<script src="assets/versions.js?v=1.9.0"></script>
<script src="script.js?v=1.9.0"></script>
<script src="builder/data.js?v=1.9.0"></script>
<script src="builder/builder.js?v=1.9.0"></script>
<script src="builder/ui.js?v=1.9.0"></script>
<link rel="stylesheet" href="style.css?v=1.10.0">
<script src="assets/versions.js?v=1.10.0"></script>
<script src="script.js?v=1.10.0"></script>
<script src="builder/data.js?v=1.10.0"></script>
<script src="builder/builder.js?v=1.10.0"></script>
<script src="builder/ui.js?v=1.10.0"></script>
</head>
<body>
+1 -1
View File
@@ -1 +1 @@
{"mods/patch_cdj900nxs.py":"#!/usr/bin/env python3\n# SPDX-License-Identifier: GPL-2.0-or-later\n\"\"\"Apply arnoldasr's CDJ-900NXS 1.31 mods to the unpacked MAIN image.\n\n usage: patch_cdj900nxs.py <main_unpacked.bin> <patched.bin> <mod>[,<mod>...]\n patch_cdj900nxs.py --list\n\nThe mods come from https://github.com/arnoldasr/cdj900nxs, read as data from a\ncheckout of it (CDJ900NXS_MODS_SRC, default mods/cdj900nxs/upstream, which is\nnot committed: that repository carries no licence). Nothing of its Python is\nimported; what its build_firmware.py does is redone here:\n\n extended_bpm the BPM with hundredths: the stock tenths moved into a new\n small digit above, the lower one showing hundredths.\n phasemeter the two-line phase meter (orange master, blue this deck, a\n marker each) in place of the four boxes, chosen in UTILITY >\n PHASE METER (SLIP FLASHING relabelled; mods/phase-meter-\n utility.cdjmod.json).\n advanced_waveforms (was rgb_waveform; based on arnoldasr's, updated and\n maintained by us) the big waveform in rekordbox's RGB colours\n (1.0.1: also when its colour detail is a little short,\n cdj900nxs/wavefix.py), and the overview's colour table as a red-to-white\n gradient (mods/waveform-colour.cdjmod.json); with our\n UTILITY > WAVEFORM: BLUE / RGB / 3BAND (cdj900nxs/wavemodes.py,\n left out with public=True).\n\n The three are arnoldasr's code mod (patches/mods.json): hooks\n in the application redirected to SH-4 code appended after it\n (0x08FC1000), plus an asset blob at 0x08FC2D00 generated from\n the stock image (the resource table extended by four phase-meter\n images, then the RGB waveform palette and LUT). Upstream tested\n it as one build, and as one without the RGB waveform\n (patches/bpm-phase-meter.json); one of those two is built and\n checked against its hash first, then the hooks of a feature not\n chosen get their original bytes back. Their shared startup hook\n (0x08C071FC) installs the BPM digits and the phase markers: the\n call of the one not chosen is taken out there.\n beatjump ours, not arnoldasr's (cdj900nxs/beatjump.py): TRACK SEARCH\n jumps 1/2/4/8 beats along the grid, chosen in UTILITY > BEAT JUMP,\n made at once in the DSP's decoded audio (cdj900nxs/dspjump.py, a\n patch of the audio DSP's code),\n which replaces SCREEN SAVER. hotcuekeys' engine makes the jumps,\n so it needs hotcuekeys and cuecolours. Needs no upstream checkout.\n cuecolours ours (cdj900nxs/cuecolours.py): memory cues drawn in their\n rekordbox colour on the overview and the detail waveform, the\n rekordbox hot cues shown as lettered boxes.\n Needs no upstream checkout.\n hotcuekeys ours (cdj900nxs/hotcuekeys.py): UTILITY > HOT CUE KEYS (a new,\n 18th item); with it ON, QUANTIZE briefly pressed switches a hot\n cue key mode shown in a HOT KEYS box, held it is QUANTIZE. In\n the mode the top three BEAT DIVIDE keys play hot cues A-C (held: a\n gate), set one (empty key held while paused) or delete one\n (DELETE held). The hot cues come from cuecolours.\n ledsaver ours (cdj900nxs/ledsaver.py): UTILITY > LED ANIMATION (one more\n item, after the others); with it ON, while the screen saver dims\n the display the button LEDs and the jog's rings play a loop.\n keynotation ours (cdj900nxs/keynotation.py): UTILITY > KEY NOTATION (one\n more item): every track's key in Camelot, Open Key or classic\n notation, whatever rekordbox exported.\n usbautoload ours (cdj900nxs/usbautoload.py): UTILITY > USB AUTO LOAD (one\n more item): a stick's MY SETTINGS are loaded when the player finds\n them, without waiting for MENU.\n quicksearch ours (cdj900nxs/quicksearch.py): BROWSE held opens SEARCH,\n BROWSE twice the list the playing track came from.\n (phasemeter, in unreleased builds, also gets ours from cdj900nxs/phasereverse.py:\n UTILITY > PHASE METER OFF / ON / REVERSE, and the beat countdown\n moved clear of the line meter; `phasereverse` is an old name for it.)\n wide_waveform ours (cdj900nxs/widewave.py): the big waveform runs on to the\n right edge (624 columns, the extra ones ahead of the position); the\n ZOOM/GRID wheel gives way to a small grey ZOOM / GRID box.\n credit ours (cdj900nxs/credit.py): the boot screen says \"Pionaarr Mods\n 1.0\" where it said \"Ver 1.31\".\n\nEvery patch is applied only where the image holds the expected original\nbytes, and arnoldasr's code is first built as one of the builds he tested\nand checked against its hash.\n\nOur lzss_decode.py runs 54Line truncated
{"mods/patch_cdj900nxs.py":"#!/usr/bin/env python3\n# SPDX-License-Identifier: GPL-2.0-or-later\n\"\"\"Apply arnoldasr's CDJ-900NXS 1.31 mods to the unpacked MAIN image.\n\n usage: patch_cdj900nxs.py <main_unpacked.bin> <patched.bin> <mod>[,<mod>...]\n patch_cdj900nxs.py --list\n\nThe mods come from https://github.com/arnoldasr/cdj900nxs, read as data from a\ncheckout of it (CDJ900NXS_MODS_SRC, default mods/cdj900nxs/upstream, which is\nnot committed: that repository carries no licence). Nothing of its Python is\nimported; what its build_firmware.py does is redone here:\n\n extended_bpm the BPM with hundredths: the stock tenths moved into a new\n small digit above, the lower one showing hundredths.\n phasemeter the two-line phase meter (orange master, blue this deck, a\n marker each) in place of the four boxes, chosen in UTILITY >\n PHASE METER (SLIP FLASHING relabelled; mods/phase-meter-\n utility.cdjmod.json).\n advanced_waveforms (was rgb_waveform; based on arnoldasr's, updated and\n maintained by us) the big waveform in rekordbox's RGB colours\n (1.0.1: also when its colour detail is a little short,\n cdj900nxs/wavefix.py), and the overview's colour table as a red-to-white\n gradient (mods/waveform-colour.cdjmod.json); with our\n UTILITY > WAVEFORM: BLUE / RGB / 3BAND (cdj900nxs/wavemodes.py,\n left out with public=True).\n\n The three are arnoldasr's code mod (patches/mods.json): hooks\n in the application redirected to SH-4 code appended after it\n (0x08FC1000), plus an asset blob at 0x08FC2D00 generated from\n the stock image (the resource table extended by four phase-meter\n images, then the RGB waveform palette and LUT). Upstream tested\n it as one build, and as one without the RGB waveform\n (patches/bpm-phase-meter.json); one of those two is built and\n checked against its hash first, then the hooks of a feature not\n chosen get their original bytes back. Their shared startup hook\n (0x08C071FC) installs the BPM digits and the phase markers: the\n call of the one not chosen is taken out there.\n beatjump ours, not arnoldasr's (cdj900nxs/beatjump.py): TRACK SEARCH\n jumps 1/2/4/8 beats along the grid, chosen in UTILITY > BEAT JUMP,\n made at once in the DSP's decoded audio (cdj900nxs/dspjump.py, a\n patch of the audio DSP's code),\n which replaces SCREEN SAVER. hotcuekeys' engine makes the jumps,\n so it needs hotcuekeys and cuecolours. Needs no upstream checkout.\n cuecolours ours (cdj900nxs/cuecolours.py): memory cues drawn in their\n rekordbox colour on the overview and the detail waveform, the\n rekordbox hot cues shown as lettered boxes.\n Needs no upstream checkout.\n hotcuekeys ours (cdj900nxs/hotcuekeys.py): UTILITY > HOT CUE KEYS (a new,\n 18th item); with it ON, QUANTIZE briefly pressed switches a hot\n cue key mode shown in a HOT KEYS box, held it is QUANTIZE. In\n the mode the top three BEAT DIVIDE keys play hot cues A-C (held: a\n gate), set one (empty key held while paused) or delete one\n (DELETE held). The hot cues come from cuecolours.\n ledsaver ours (cdj900nxs/ledsaver.py): UTILITY > LED ANIMATION (one more\n item, after the others); with it ON, while the screen saver dims\n the display the button LEDs and the jog's rings play a loop.\n keynotation ours (cdj900nxs/keynotation.py): UTILITY > KEY NOTATION (one\n more item): every track's key in Camelot, Open Key or classic\n notation, whatever rekordbox exported.\n usbautoload ours (cdj900nxs/usbautoload.py): UTILITY > USB AUTO LOAD (one\n more item): a stick's MY SETTINGS are loaded when the player finds\n them, without waiting for MENU.\n quicksearch ours (cdj900nxs/quicksearch.py): BROWSE held opens SEARCH,\n BROWSE twice the list the playing track came from.\n (phasemeter, in unreleased builds, also gets ours from cdj900nxs/phasereverse.py:\n UTILITY > PHASE METER OFF / ON / REVERSE, and the beat countdown\n moved clear of the line meter; `phasereverse` is an old name for it.)\n wide_waveform ours (cdj900nxs/widewave.py): the big waveform runs on to the\n right edge (624 columns, the extra ones ahead of the position); the\n ZOOM/GRID wheel gives way to a small grey ZOOM / GRID box.\n credit ours (cdj900nxs/credit.py): the boot screen says \"Pionaarr Mods\n 1.0\" where it said \"Ver 1.31\".\n\nEvery patch is applied only where the image holds the expected original\nbytes, and arnoldasr's code is first built as one of the builds he tested\nand checked against its hash.\n\nOur lzss_decode.py runs 54Line truncated
+3 -1
View File
@@ -29,10 +29,12 @@
what: 'BROWSE held: SEARCH; BROWSE twice: the list the playing track came from, the track picked.' },
{ id: 'usbautoload', name: 'USB auto load', by: 'ours', state: 'experimental',
what: 'MY SETTINGS on a stick loaded the moment the player finds them. UTILITY › USB AUTO LOAD.' },
{ id: 'bpmhalfdouble', name: 'BPM ×2 / ÷2', by: 'ours', state: 'experimental', needs: 'quicksearch',
what: 'TAG TRACK held + CALL ◀ halves, CALL ▶ doubles the track’s BPM and beat grid (85 → 170), as rekordbox does; kept on the USB stick.' },
{ id: 'wide_waveform', name: 'Wide waveform', by: 'ours', state: 'experimental',
what: 'The big waveform runs on to the right edge where the ZOOM/GRID wheel was; a small grey box over the BPM display says ZOOM or GRID.' },
{ id: 'credit', name: 'Boot text', by: 'ours', state: 'stable',
what: 'The boot screen says “Pionaarr Mods 1.9.0” instead of “Ver 1.31”.' }
what: 'The boot screen says “Pionaarr Mods 1.10.0” instead of “Ver 1.31”.' }
];
var chosen = {};
MODS.forEach(function (m) { chosen[m.id] = true; }); // every mod ticked at the start
+3 -3
View File
@@ -6,9 +6,9 @@
<title>Datenschutzerklärung · Pionaarr Mods</title>
<meta name="description" content="Datenschutzerklärung von Pionaarr Mods.">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.9.0">
<script src="assets/versions.js?v=1.9.0"></script>
<script src="script.js?v=1.9.0"></script>
<link rel="stylesheet" href="style.css?v=1.10.0">
<script src="assets/versions.js?v=1.10.0"></script>
<script src="script.js?v=1.10.0"></script>
</head>
<body>
+14 -6
View File
@@ -6,9 +6,9 @@
<title>Pionaarr Mods Docs</title>
<meta name="description" content="How to build and install the CDJ-900NXS mods and how each one works, including the hot cue keys: play, gate, set and delete.">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.9.0">
<script src="assets/versions.js?v=1.9.0"></script>
<script src="script.js?v=1.9.0"></script>
<link rel="stylesheet" href="style.css?v=1.10.0">
<script src="assets/versions.js?v=1.10.0"></script>
<script src="script.js?v=1.10.0"></script>
</head>
<body>
@@ -49,6 +49,7 @@
<a href="#quicksearch">quicksearch</a>
<a href="#usbautoload">usbautoload</a>
<a href="#wide_waveform">wide_waveform</a>
<a href="#bpmhalfdouble">bpmhalfdouble</a>
<div class="h">Hot cue keys</div>
<a href="#hk-mode">The hot key mode</a>
<a href="#hk-load">Loading</a>
@@ -219,8 +220,8 @@
<figure class="shot"><img src="assets/utility-key.png" alt="UTILITY with KEY NOTATION"><figcaption>UTILITY › KEY NOTATION.</figcaption></figure>
<h2 id="credit">credit <span class="badge author">Pionaarr mod</span></h2>
<p>The boot screen says <em>Pionaarr Mods 1.9.0</em> where it said <em>Ver 1.31</em>. Ticked at the start; untick it to keep the stock text. UTILITY and the LINK screen still show the real version, 1.31.</p>
<figure class="shot"><img src="assets/boot-mods.png" alt="Boot screen with Pionaarr Mods 1.9.0"><figcaption>The boot screen.</figcaption></figure>
<p>The boot screen says <em>Pionaarr Mods 1.10.0</em> where it said <em>Ver 1.31</em>. Ticked at the start; untick it to keep the stock text. UTILITY and the LINK screen still show the real version, 1.31.</p>
<figure class="shot"><img src="assets/boot-mods.png" alt="Boot screen with Pionaarr Mods 1.10.0"><figcaption>The boot screen.</figcaption></figure>
<h2 id="cuenames">cuenames <span class="badge author">Pionaarr mod</span> <span class="state experimental">experimental</span></h2>
<p>The comment a memory cue or hot cue has in rekordbox (the cue list's comment field, exported with the stick) appears in the title bar, right of the title, in the cue's colour: always the next cue ahead that has one, a hot cue with its letter ("A DROP"). A cue just passed shows for a second more, so a cue you CALL shows its name while you stand on it. Hidden while BROWSE is open; a long title is cut short before the name. Needs <code>cuecolours</code>.</p>
@@ -246,6 +247,12 @@
<figure class="shot"><img src="assets/widewave.png" alt="The waveform to the right edge, a ZOOM box above it"><figcaption>ZOOM: the waveform to the edge, the drop ahead already in sight.</figcaption></figure>
<figure class="shot"><img src="assets/widewave-grid.png" alt="Grid lines over the whole width, a GRID box above"><figcaption>GRID: beat grid adjust, the box says so.</figcaption></figure>
<h2 id="bpmhalfdouble">bpmhalfdouble <span class="badge author">Pionaarr mod</span> <span class="state experimental">experimental</span></h2>
<p>Doubles or halves the loaded track's BPM and beat grid from the deck, as rekordbox's grid editor does: a track analysed at 85 BPM becomes 170 BPM to mix with one at 175. Hold <strong>TAG TRACK/REMOVE</strong> and press <strong>CALL ◀</strong> for ÷2 or <strong>CALL ▶</strong> for ×2. TAG TRACK pressed alone tags as before.</p>
<p>The deck must stand (paused or at cue): the track is loaded again with its new grid, so BPM display, beat ticks, bar counters, quantize, beat jump and the BPM sent over Pro DJ Link all follow. It stands at its cue point afterwards. The title bar says what was done (“BPM ×2 → 170.00 BPM”); as in rekordbox, a result under 60 or over 240 BPM is refused (“×2 makes no sense”). ×2 after ÷2 gives the original grid back exactly.</p>
<p>The change is kept on the USB stick, in <code>PIONEER/PIONAARR.BPM</code> (rekordbox's own files are not touched), and is there again the next time the stick is used in a modded player. Tracks from another player's stick over Pro DJ Link keep it until this player is switched off. Needs <code>quicksearch</code>, which loads the track again.</p>
<figure class="shot"><img src="assets/bpmx2.png" alt="145 BPM before, 72.50 BPM after"><figcaption>÷2: 145 BPM becomes 72.50 BPM.</figcaption></figure>
<p>Still to come: see <a href="upcoming.html">Upcoming</a>.</p>
<!-- ===================== status ===================== -->
@@ -267,6 +274,7 @@
<tr><td><code>played</code></td><td>Pionaarr mod</td><td><span class="state experimental">experimental</span></td><td><span class="player">ran on a player</span></td></tr>
<tr><td><code>endwarn</code></td><td>Pionaarr mod</td><td><span class="state experimental">experimental</span></td><td><span class="player">ran on a player</span></td></tr>
<tr><td><code>wide_waveform</code></td><td>Pionaarr mod</td><td><span class="state experimental">experimental</span></td><td><span class="player no">emulator only</span></td></tr>
<tr><td><code>bpmhalfdouble</code></td><td>Pionaarr mod</td><td><span class="state experimental">experimental</span></td><td><span class="player no">emulator only</span></td></tr>
<tr><td><code>quicksearch</code></td><td>Pionaarr mod</td><td><span class="state experimental">experimental</span></td><td><span class="player">ran on a player</span></td></tr>
<tr><td><code>usbautoload</code></td><td>Pionaarr mod</td><td><span class="state experimental">experimental</span></td><td><span class="player">ran on a player</span></td></tr>
</tbody>
@@ -283,7 +291,7 @@
<h3>Do I need rekordbox?</h3>
<p>Cue colours and hot cues come from a USB stick exported with rekordbox. Without them the mods show what the stock player shows.</p>
<h3>Why is the version still 1.31?</h3>
<p>The update file says 1.32 so the player installs it; the application inside still reports 1.31 (in UTILITY and on the LINK screen). Only the boot screen says <em>Pionaarr Mods 1.9.0</em> instead of <em>Ver 1.31</em>.</p>
<p>The update file says 1.32 so the player installs it; the application inside still reports 1.31 (in UTILITY and on the LINK screen). Only the boot screen says <em>Pionaarr Mods 1.10.0</em> instead of <em>Ver 1.31</em>.</p>
</article>
</main>
+3 -3
View File
@@ -6,9 +6,9 @@
<title>Impressum · Pionaarr Mods</title>
<meta name="description" content="Impressum und Offenlegung von Pionaarr Mods.">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.9.0">
<script src="assets/versions.js?v=1.9.0"></script>
<script src="script.js?v=1.9.0"></script>
<link rel="stylesheet" href="style.css?v=1.10.0">
<script src="assets/versions.js?v=1.10.0"></script>
<script src="script.js?v=1.10.0"></script>
</head>
<body>
+17 -5
View File
@@ -6,9 +6,9 @@
<title>Pionaarr Mods</title>
<meta name="description" content="Firmware mods for the Pioneer CDJ-900NXS (firmware 1.31): RGB waveform, extended BPM, phase meter, cue colours, hot cues on the beat divide keys and more — compared with stock, built in your browser.">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.9.0">
<script src="assets/versions.js?v=1.9.0"></script>
<script src="script.js?v=1.9.0"></script>
<link rel="stylesheet" href="style.css?v=1.10.0">
<script src="assets/versions.js?v=1.10.0"></script>
<script src="script.js?v=1.10.0"></script>
</head>
<body>
@@ -169,6 +169,18 @@
<a class="more" href="docs.html#endwarn">More →</a>
</article>
<!-- bpmhalfdouble -->
<article class="card">
<div class="card-head">
<h3>BPM ×2 / ÷2</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<div class="by">Pionaarr mod · <code>bpmhalfdouble</code></div>
<figure class="tshot"><img src="assets/bpmx2.png" alt="145 BPM halved to 72.50 BPM" loading="lazy"></figure>
<p>TAG TRACK held + CALL ◀ / ▶ halves or doubles the track's BPM and grid, kept on the USB.</p>
<a class="more" href="docs.html#bpmhalfdouble">More →</a>
</article>
<!-- wide_waveform -->
<article class="card">
<div class="card-head">
@@ -244,8 +256,8 @@
<div class="meta"><span class="state stable">stable</span></div>
</div>
<div class="by">Pionaarr mod · <code>credit</code></div>
<figure class="tshot"><img src="assets/card-boot.png" alt="Boot screen: Pionaarr Mods 1.9.0" loading="lazy"></figure>
<p>The boot screen says <em>Pionaarr Mods 1.9.0</em>.</p>
<figure class="tshot"><img src="assets/card-boot.png" alt="Boot screen: Pionaarr Mods 1.10.0" loading="lazy"></figure>
<p>The boot screen says <em>Pionaarr Mods 1.10.0</em>.</p>
</article>
</div>
+3 -3
View File
@@ -6,9 +6,9 @@
<title>Pionaarr Mods Known Issues</title>
<meta name="description" content="What does not work right yet in the CDJ-900NXS mods, and what we are doing about it.">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.9.0">
<script src="assets/versions.js?v=1.9.0"></script>
<script src="script.js?v=1.9.0"></script>
<link rel="stylesheet" href="style.css?v=1.10.0">
<script src="assets/versions.js?v=1.10.0"></script>
<script src="script.js?v=1.10.0"></script>
</head>
<body>
+16
View File
@@ -1,6 +1,13 @@
{
"_about": "The site's changelog, newest first. Versions follow Semantic Versioning (MAJOR.MINOR.PATCH), dates ISO 8601 (DIN EN 28601). make_builder_data.py adds every mod's current version from its module and writes assets/versions.js.",
"site": [
{
"version": "1.10.0",
"date": "2026-10-21",
"changes": [
"New mod: BPM ×2 / ÷2 (bpmhalfdouble), the track's BPM and beat grid doubled or halved from the deck, kept on the USB stick."
]
},
{
"version": "1.9.0",
"date": "2026-10-21",
@@ -389,6 +396,15 @@
"The big waveform 624 columns wide instead of 536, to the right edge; the extra columns are ahead of the playing position. The ZOOM/GRID wheel replaced by a grey ZOOM / GRID box over the BPM display."
]
}
],
"bpmhalfdouble": [
{
"version": "0.2.0",
"date": "2026-10-21",
"changes": [
"TAG TRACK held + CALL ◀ / ▶ halves or doubles the loaded track's BPM and beat grid; the track is loaded again with it, so display, beat ticks, bars, quantize and Pro DJ Link follow. Kept on the USB stick in PIONEER/PIONAARR.BPM. Results under 60 or over 240 BPM refused."
]
}
]
}
}
+1 -1
View File
@@ -140,7 +140,7 @@ def apply_ops(app, stock, ops, hk, size):
MODS_ALL = ('extended_bpm', 'phasemeter', 'advanced_waveforms', 'beatjump', 'cuecolours', 'hotcuekeys',
'ledsaver', 'keynotation', 'usbautoload', 'quicksearch', 'cuenames', 'played', 'endwarn', 'wide_waveform', 'credit')
'ledsaver', 'keynotation', 'usbautoload', 'quicksearch', 'cuenames', 'played', 'endwarn', 'wide_waveform', 'bpmhalfdouble', 'credit')
def python_bundle(repo):
+3 -3
View File
@@ -6,9 +6,9 @@
<title>Pionaarr Mods Upcoming</title>
<meta name="description" content="What comes next for the CDJ-900NXS mods: quick search, USB auto load, a reversed phase meter, stems and a 3-band waveform.">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.9.0">
<script src="assets/versions.js?v=1.9.0"></script>
<script src="script.js?v=1.9.0"></script>
<link rel="stylesheet" href="style.css?v=1.10.0">
<script src="assets/versions.js?v=1.10.0"></script>
<script src="script.js?v=1.10.0"></script>
</head>
<body>