site 1.9.1: PHASE METER REVERSE kept over a restart, LED animation's own setting slot

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Thiemo TizianiandClaude Opus 5.5 committed 2026-10-21 21:01:19 +02:00
1 parent 44ab0bc7a2
commit 29c5da5905
11 files changed
+86 -34

No files matched your search

+29 -3
View File
@@ -1,8 +1,16 @@
// Generated by tools/make_builder_data.py from tools/changelog.json and the mods' versions.
window.CDJ_VERSIONS = {
"site": "1.9.0",
"site": "1.9.1",
"date": "2026-10-21",
"log": [
{
"version": "1.9.1",
"date": "2026-10-21",
"changes": [
"Phase meter 1.0.1: PHASE METER REVERSE is kept when the player is switched off and on (it came back as OFF).",
"LED animation 1.0.1: its setting no longer shares a slot with BEAT JUMP's, which could mix the two up after a restart."
]
},
{
"version": "1.9.0",
"date": "2026-10-21",
@@ -186,12 +194,12 @@ window.CDJ_VERSIONS = {
],
"mods": {
"extended_bpm": "1.0.0",
"phasemeter": "1.0.0",
"phasemeter": "1.0.1",
"advanced_waveforms": "1.2.0",
"beatjump": "1.0.1",
"cuecolours": "1.0.1",
"hotcuekeys": "1.3.0",
"ledsaver": "1.0.0",
"ledsaver": "1.0.1",
"keynotation": "1.2.1",
"usbautoload": "0.1.0",
"quicksearch": "0.4.1",
@@ -408,6 +416,24 @@ 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."
]
}
],
"phasemeter": [
{
"version": "1.0.1",
"date": "2026-10-21",
"changes": [
"PHASE METER REVERSE kept over a restart: the player stores the setting in one bit, so REVERSE came back as OFF. REVERSE is now stored as ON and remembered as REVERSE; OFF stays OFF, ON stays ON, also with MY SETTINGS from a USB."
]
}
],
"ledsaver": [
{
"version": "1.0.1",
"date": "2026-10-21",
"changes": [
"Its setting in a slot of its own (it shared BEAT JUMP's, so a restart could give one the other's value). LED ANIMATION is back at its default once after the update."
]
}
]
}
};
+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.9.1">
<script src="assets/versions.js?v=1.9.1"></script>
<script src="script.js?v=1.9.1"></script>
<script src="builder/data.js?v=1.9.1"></script>
<script src="builder/builder.js?v=1.9.1"></script>
<script src="builder/ui.js?v=1.9.1"></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
+1 -1
View File
@@ -32,7 +32,7 @@
{ 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.9.1” 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.9.1">
<script src="assets/versions.js?v=1.9.1"></script>
<script src="script.js?v=1.9.1"></script>
</head>
<body>
+6 -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.9.1">
<script src="assets/versions.js?v=1.9.1"></script>
<script src="script.js?v=1.9.1"></script>
</head>
<body>
@@ -219,8 +219,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.9.1</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.1"><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>
@@ -283,7 +283,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.9.1</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.9.1">
<script src="assets/versions.js?v=1.9.1"></script>
<script src="script.js?v=1.9.1"></script>
</head>
<body>
+5 -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.9.1">
<script src="assets/versions.js?v=1.9.1"></script>
<script src="script.js?v=1.9.1"></script>
</head>
<body>
@@ -244,8 +244,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.9.1" loading="lazy"></figure>
<p>The boot screen says <em>Pionaarr Mods 1.9.1</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.9.1">
<script src="assets/versions.js?v=1.9.1"></script>
<script src="script.js?v=1.9.1"></script>
</head>
<body>
+26
View File
@@ -1,6 +1,14 @@
{
"_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.9.1",
"date": "2026-10-21",
"changes": [
"Phase meter 1.0.1: PHASE METER REVERSE is kept when the player is switched off and on (it came back as OFF).",
"LED animation 1.0.1: its setting no longer shares a slot with BEAT JUMP's, which could mix the two up after a restart."
]
},
{
"version": "1.9.0",
"date": "2026-10-21",
@@ -389,6 +397,24 @@
"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."
]
}
],
"phasemeter": [
{
"version": "1.0.1",
"date": "2026-10-21",
"changes": [
"PHASE METER REVERSE kept over a restart: the player stores the setting in one bit, so REVERSE came back as OFF. REVERSE is now stored as ON and remembered as REVERSE; OFF stays OFF, ON stays ON, also with MY SETTINGS from a USB."
]
}
],
"ledsaver": [
{
"version": "1.0.1",
"date": "2026-10-21",
"changes": [
"Its setting in a slot of its own (it shared BEAT JUMP's, so a restart could give one the other's value). LED ANIMATION is back at its default once after the update."
]
}
]
}
}
+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.9.1">
<script src="assets/versions.js?v=1.9.1"></script>
<script src="script.js?v=1.9.1"></script>
</head>
<body>