Site 1.2.0: rgb_waveform is now Advanced waveforms
Renamed everywhere (builder, pages, data); the built update is byte for byte the same. Upcoming: UTILITY > WAVEFORM (BLUE / RGB / 3BAND) in testing. The generator builds the released state only (patch(..., public=True)). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8133cd0b4b
commit
3e017e2a8e
10 files changed
+57
-42
No files matched your search
+10
-3
@@ -1,8 +1,16 @@
|
||||
// Generated by tools/make_builder_data.py from tools/changelog.json and the mods' versions.
|
||||
window.CDJ_VERSIONS = {
|
||||
"site": "1.1.1",
|
||||
"site": "1.2.0",
|
||||
"date": "2026-10-20",
|
||||
"log": [
|
||||
{
|
||||
"version": "1.2.0",
|
||||
"date": "2026-10-20",
|
||||
"changes": [
|
||||
"rgb_waveform is now called advanced_waveforms (Advanced waveforms); the old name still works in the patcher.",
|
||||
"Upcoming: UTILITY › WAVEFORM with BLUE / RGB / 3BAND for advanced waveforms, in testing."
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.1.1",
|
||||
"date": "2026-10-20",
|
||||
@@ -32,7 +40,7 @@ window.CDJ_VERSIONS = {
|
||||
"mods": {
|
||||
"extended_bpm": "1.0.0",
|
||||
"phasemeter": "1.0.0",
|
||||
"rgb_waveform": "1.0.0",
|
||||
"advanced_waveforms": "1.0.0",
|
||||
"beatjump": "1.0.0",
|
||||
"cuecolours": "1.0.0",
|
||||
"hotcuekeys": "1.2.0",
|
||||
@@ -41,7 +49,6 @@ window.CDJ_VERSIONS = {
|
||||
"usbautoload": "0.1.0",
|
||||
"quicksearch": "0.1.0",
|
||||
"phasereverse": "0.1.0",
|
||||
"waveform3band": "0.1.0",
|
||||
"credit": "1.0.0"
|
||||
},
|
||||
"modlog": {
|
||||
|
||||
+7
-7
@@ -8,12 +8,12 @@
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="style.css?v=1.1.1">
|
||||
<script src="assets/versions.js?v=1.1.1"></script>
|
||||
<script src="script.js?v=1.1.1"></script>
|
||||
<script src="builder/data.js?v=1.1.1"></script>
|
||||
<script src="builder/builder.js?v=1.1.1"></script>
|
||||
<script src="builder/ui.js?v=1.1.1"></script>
|
||||
<link rel="stylesheet" href="style.css?v=1.2.0">
|
||||
<script src="assets/versions.js?v=1.2.0"></script>
|
||||
<script src="script.js?v=1.2.0"></script>
|
||||
<script src="builder/data.js?v=1.2.0"></script>
|
||||
<script src="builder/builder.js?v=1.2.0"></script>
|
||||
<script src="builder/ui.js?v=1.2.0"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<div class="wrap cols">
|
||||
<div>
|
||||
<div class="ai"><span class="dot"></span>Made with Claude Code · Claude Opus 5.5</div>
|
||||
<p>This website, the builder, our mods and the patcher were developed with Claude Code (Anthropic's AI coding assistant, model Claude Opus 5.5), by reverse engineering the firmware in an emulator. The mods <code>extended_bpm</code>, <code>phasemeter</code> and <code>rgb_waveform</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
|
||||
<p>This website, the builder, our mods and the patcher were developed with Claude Code (Anthropic's AI coding assistant, model Claude Opus 5.5), by reverse engineering the firmware in an emulator. The mods <code>extended_bpm</code>, <code>phasemeter</code> and <code>advanced_waveforms</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4>Disclaimer</h4>
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@
|
||||
var APP_START = 0x40000, APP_END = 0x7E0000, RECORD_DATA = 32;
|
||||
var ADDRESS_BYTES = { 0: 2, 1: 2, 2: 3, 3: 4, 5: 2, 6: 3, 7: 4, 8: 3, 9: 2 };
|
||||
var LABEL = '1.32';
|
||||
var UPSTREAM = ['extended_bpm', 'phasemeter', 'rgb_waveform'];
|
||||
var UPSTREAM = ['extended_bpm', 'phasemeter', 'advanced_waveforms'];
|
||||
var OURS = ['beatjump', 'cuecolours', 'hotcuekeys', 'ledsaver', 'keynotation', 'credit'];
|
||||
|
||||
function fail(msg) { throw new Error(msg); }
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
// Generated by tools/make_builder_data.py -- do not edit.
|
||||
window.BUILDER_DATA = {"stockUpdSha256":"e96bca7d1ac983985992a8e5fa7813e1ebf04bef514e0c6cfd0a8375f667f7f9","stockAppSha256":"1ac3e30cde292865413950fe159663b3958e85939ed0a5d0122f796809a5f8ef","appSize":16519056,"dataBase":150744320,"upstream":{"extended_bpm":{"size":16576352,"ops":[["data",145914824,"45b88bcd5afea839"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150739456,"786195378d06baff"],["data",150739521,"503c09b6b0baefb3"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"7010683be462baa0"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"172e933902cb3738"],["data",150742016,"2853d86b697a9dfa"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,49760]]},"phasemeter":{"size":16576352,"ops":[["data",135069542,"845677fae2e67916"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"845677fae2e67916"],["data",150538228,"845677fae2e67916"],["data",150556534,"845677fae2e67916"],["data",150572646,"845677fae2e67916"],["data",150587026,"845677fae2e67916"],["data",150601380,"845677fae2e67916"],["data",150619274,"845677fae2e67916"],["data",150637628,"845677fae2e67916"],["data",150655862,"845677fae2e67916"],["data",150673666,"845677fae2e67916"],["data",150692276,"845677fae2e67916"],["data",150709976,"845677fae2e67916"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150739456,"786195378d06baff"],["data",150739521,"503c09b6b0baefb3"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"7010683be462baa0"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"172e933902cb3738"],["data",150742016,"acf759afff056d54"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,49760]]},"rgb_waveform":{"size":16577120,"ops":[["data",144311836,"ca71ec9290d6ed48"],["data",146565168,"52b8fe18a1fed3bf"],["data",146565756,"a2721044eff0d2f6"],["data",146603378,"620bfdaa346b088f"],["data",146603856,"582d807f9ed58432"],["data",147243844,"d77596e8499df246"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150738944,"91aaac306bd43135"],["data",150739456,"786195378d06baff"],["data",150739521,"d5326732238d3e24"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"f9699e90e078917d"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"bb010f4579136412"],["data",150742016,"9bed08a38f1020b6"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,50528]]},"extended_bpm,phasemeter":{"size":16576352,"ops":[["data",135069542,"845677fae2e67916"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"8Line truncated
|
||||
window.BUILDER_DATA = {"stockUpdSha256":"e96bca7d1ac983985992a8e5fa7813e1ebf04bef514e0c6cfd0a8375f667f7f9","stockAppSha256":"1ac3e30cde292865413950fe159663b3958e85939ed0a5d0122f796809a5f8ef","appSize":16519056,"dataBase":150744320,"upstream":{"extended_bpm":{"size":16576352,"ops":[["data",145914824,"45b88bcd5afea839"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150739456,"786195378d06baff"],["data",150739521,"503c09b6b0baefb3"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"7010683be462baa0"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"172e933902cb3738"],["data",150742016,"2853d86b697a9dfa"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,49760]]},"phasemeter":{"size":16576352,"ops":[["data",135069542,"845677fae2e67916"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"845677fae2e67916"],["data",150538228,"845677fae2e67916"],["data",150556534,"845677fae2e67916"],["data",150572646,"845677fae2e67916"],["data",150587026,"845677fae2e67916"],["data",150601380,"845677fae2e67916"],["data",150619274,"845677fae2e67916"],["data",150637628,"845677fae2e67916"],["data",150655862,"845677fae2e67916"],["data",150673666,"845677fae2e67916"],["data",150692276,"845677fae2e67916"],["data",150709976,"845677fae2e67916"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150739456,"786195378d06baff"],["data",150739521,"503c09b6b0baefb3"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"7010683be462baa0"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"172e933902cb3738"],["data",150742016,"acf759afff056d54"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,49760]]},"advanced_waveforms":{"size":16577120,"ops":[["data",144311836,"ca71ec9290d6ed48"],["data",146565168,"52b8fe18a1fed3bf"],["data",146565756,"a2721044eff0d2f6"],["data",146603378,"620bfdaa346b088f"],["data",146603856,"582d807f9ed58432"],["data",147243844,"d77596e8499df246"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150738944,"91aaac306bd43135"],["data",150739456,"786195378d06baff"],["data",150739521,"d5326732238d3e24"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"f9699e90e078917d"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"bb010f4579136412"],["data",150742016,"9bed08a38f1020b6"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,50528]]},"extended_bpm,phasemeter":{"size":16576352,"ops":[["data",135069542,"845677fae2e67916"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519Line truncated
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
what: 'BPM with two decimals: the tenths as a small digit above, the hundredths below.' },
|
||||
{ id: 'phasemeter', name: 'Phase meter', by: 'arnoldasr', state: 'stable',
|
||||
what: 'Two-line phase meter instead of the four boxes; UTILITY › PHASE METER (was SLIP FLASHING) switches it.' },
|
||||
{ id: 'rgb_waveform', name: 'RGB waveform', by: 'arnoldasr', state: 'stable',
|
||||
{ id: 'advanced_waveforms', name: 'Advanced waveforms', by: 'arnoldasr', state: 'stable',
|
||||
what: 'The big waveform in RGB colours, the overview as a red-to-white gradient.' },
|
||||
{ id: 'beatjump', name: 'Beat jump', by: 'ours', state: 'experimental', needs: 'hotcuekeys',
|
||||
what: 'TRACK SEARCH ◀◀ ▶▶ jumps 1/2/4/8 beats along the beat grid, at once and in phase. UTILITY › BEAT JUMP (was SCREEN SAVER).' },
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="style.css?v=1.1.1">
|
||||
<script src="assets/versions.js?v=1.1.1"></script>
|
||||
<script src="script.js?v=1.1.1"></script>
|
||||
<link rel="stylesheet" href="style.css?v=1.2.0">
|
||||
<script src="assets/versions.js?v=1.2.0"></script>
|
||||
<script src="script.js?v=1.2.0"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<a href="#cli">Command line</a>
|
||||
<a href="#stock">Back to stock</a>
|
||||
<div class="h">Mods</div>
|
||||
<a href="#rgb_waveform">rgb_waveform</a>
|
||||
<a href="#advanced_waveforms">advanced_waveforms</a>
|
||||
<a href="#extended_bpm">extended_bpm</a>
|
||||
<a href="#phasemeter">phasemeter</a>
|
||||
<a href="#cuecolours">cuecolours</a>
|
||||
@@ -77,14 +77,14 @@
|
||||
<p>The Python patcher builds exactly the same file, byte for byte. Tick the mods with the arrow keys and <kbd>Space</kbd>, build with <kbd>Enter</kbd>, accept the disclaimer by typing <code>yes</code>:</p>
|
||||
<div class="term"><span class="p">$</span> python cdj900nxs_patcher.py C900NXS.UPD</div>
|
||||
<p>Or name the mods and accept with <code>--accept</code>:</p>
|
||||
<div class="term"><span class="p">$</span> python cdj900nxs_patcher.py C900NXS.UPD --mods rgb_waveform,extended_bpm,phasemeter,cuecolours,hotcuekeys,ledsaver,keynotation,credit --accept</div>
|
||||
<div class="term"><span class="p">$</span> python cdj900nxs_patcher.py C900NXS.UPD --mods advanced_waveforms,extended_bpm,phasemeter,cuecolours,hotcuekeys,ledsaver,keynotation,credit --accept</div>
|
||||
|
||||
<h2 id="stock">Back to stock</h2>
|
||||
<p>Build with no mod ticked in the builder (or <code>--stock</code> with the patcher): the original application, relabelled so the player accepts it. Update as above. Keep this file on a stick before you try any mod.</p>
|
||||
|
||||
<!-- ===================== mods ===================== -->
|
||||
<h2 id="rgb_waveform">rgb_waveform <span class="badge author">arnoldasr</span></h2>
|
||||
<p>The big waveform in RGB colours from the track's colour waveform data, and the overview's colour table as a red-to-white gradient.</p>
|
||||
<h2 id="advanced_waveforms">advanced_waveforms <span class="badge author">arnoldasr</span></h2>
|
||||
<p>The big waveform in RGB colours from the track's colour waveform data, and the overview's colour table as a red-to-white gradient. (Named <code>rgb_waveform</code> before site 1.2.0; the patcher still takes the old name.) A WAVEFORM item in UTILITY with BLUE / RGB / 3BAND is in testing, see <a href="upcoming.html">Upcoming</a>.</p>
|
||||
<figure class="shot"><img src="assets/detail-mods.png" alt="RGB detail waveform"><figcaption>RGB detail waveform.</figcaption></figure>
|
||||
|
||||
<h2 id="extended_bpm">extended_bpm <span class="badge author">arnoldasr</span></h2>
|
||||
@@ -223,7 +223,7 @@
|
||||
<table>
|
||||
<thead><tr><th>Mod</th><th>By</th><th>Status</th><th>Player</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><code>rgb_waveform</code></td><td>arnoldasr</td><td><span class="state stable">stable</span></td><td><span class="player">ran on a player</span></td></tr>
|
||||
<tr><td><code>advanced_waveforms</code></td><td>arnoldasr</td><td><span class="state stable">stable</span></td><td><span class="player">ran on a player</span></td></tr>
|
||||
<tr><td><code>extended_bpm</code></td><td>arnoldasr</td><td><span class="state stable">stable</span></td><td><span class="player">ran on a player</span></td></tr>
|
||||
<tr><td><code>phasemeter</code></td><td>arnoldasr</td><td><span class="state stable">stable</span></td><td><span class="player">ran on a player</span></td></tr>
|
||||
<tr><td><code>cuecolours</code></td><td>ours</td><td><span class="state stable">stable</span></td><td><span class="player">ran on a player</span></td></tr>
|
||||
@@ -254,7 +254,7 @@
|
||||
<div class="wrap cols">
|
||||
<div>
|
||||
<div class="ai"><span class="dot"></span>Made with Claude Code · Claude Opus 5.5</div>
|
||||
<p>This website, the builder, the mods <code>cuecolours</code>, <code>hotcuekeys</code>, <code>ledsaver</code>, <code>keynotation</code> and <code>credit</code>, and the patcher were developed with Claude Code (Anthropic's AI coding assistant, model Claude Opus 5.5), by reverse engineering the firmware in an emulator. The mods <code>rgb_waveform</code>, <code>extended_bpm</code> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
|
||||
<p>This website, the builder, the mods <code>cuecolours</code>, <code>hotcuekeys</code>, <code>ledsaver</code>, <code>keynotation</code> and <code>credit</code>, and the patcher were developed with Claude Code (Anthropic's AI coding assistant, model Claude Opus 5.5), by reverse engineering the firmware in an emulator. The mods <code>advanced_waveforms</code>, <code>extended_bpm</code> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4>Disclaimer</h4>
|
||||
|
||||
+7
-7
@@ -8,9 +8,9 @@
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="style.css?v=1.1.1">
|
||||
<script src="assets/versions.js?v=1.1.1"></script>
|
||||
<script src="script.js?v=1.1.1"></script>
|
||||
<link rel="stylesheet" href="style.css?v=1.2.0">
|
||||
<script src="assets/versions.js?v=1.2.0"></script>
|
||||
<script src="script.js?v=1.2.0"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -79,12 +79,12 @@
|
||||
|
||||
<div class="grid">
|
||||
|
||||
<!-- rgb_waveform -->
|
||||
<!-- advanced_waveforms -->
|
||||
<article class="card">
|
||||
<div class="card-head">
|
||||
<div class="icon" aria-hidden="true">🌈</div>
|
||||
<div>
|
||||
<h3>RGB waveform <code>rgb_waveform</code></h3>
|
||||
<h3>Advanced waveforms <code>advanced_waveforms</code></h3>
|
||||
<div class="by">by arnoldasr</div>
|
||||
</div>
|
||||
<div class="meta"><span class="player">ran on a player</span><span class="state stable">stable</span></div>
|
||||
@@ -288,7 +288,7 @@
|
||||
<span class="p">$</span> python cdj900nxs_patcher.py C900NXS.UPD
|
||||
|
||||
<span class="c"># or name them</span>
|
||||
<span class="p">$</span> python cdj900nxs_patcher.py C900NXS.UPD --mods rgb_waveform,extended_bpm,phasemeter,cuecolours,hotcuekeys
|
||||
<span class="p">$</span> python cdj900nxs_patcher.py C900NXS.UPD --mods advanced_waveforms,extended_bpm,phasemeter,cuecolours,hotcuekeys
|
||||
|
||||
<span class="c"># back to stock</span>
|
||||
<span class="p">$</span> python cdj900nxs_patcher.py C900NXS.UPD --stock</div>
|
||||
@@ -301,7 +301,7 @@
|
||||
<div class="wrap cols">
|
||||
<div>
|
||||
<div class="ai"><span class="dot"></span>Made with Claude Code · Claude Opus 5.5</div>
|
||||
<p>This website, the builder, the mods <code>cuecolours</code>, <code>hotcuekeys</code>, <code>ledsaver</code>, <code>keynotation</code> and <code>credit</code>, and the patcher were developed with Claude Code (Anthropic's AI coding assistant, model Claude Opus 5.5), by reverse engineering the firmware in an emulator. The mods <code>rgb_waveform</code>, <code>extended_bpm</code> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
|
||||
<p>This website, the builder, the mods <code>cuecolours</code>, <code>hotcuekeys</code>, <code>ledsaver</code>, <code>keynotation</code> and <code>credit</code>, and the patcher were developed with Claude Code (Anthropic's AI coding assistant, model Claude Opus 5.5), by reverse engineering the firmware in an emulator. The mods <code>advanced_waveforms</code>, <code>extended_bpm</code> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4>Disclaimer</h4>
|
||||
|
||||
@@ -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.2.0",
|
||||
"date": "2026-10-20",
|
||||
"changes": [
|
||||
"rgb_waveform is now called advanced_waveforms (Advanced waveforms); the old name still works in the patcher.",
|
||||
"Upcoming: UTILITY › WAVEFORM with BLUE / RGB / 3BAND for advanced waveforms, in testing."
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.1.1",
|
||||
"date": "2026-10-20",
|
||||
|
||||
@@ -18,7 +18,7 @@ go into data.js, except what is the player's own firmware:
|
||||
|
||||
arnoldasr's mods (credited on the site), as patch_cdj900nxs.py splits them
|
||||
up, are in data.js the same way: per combination of extended_bpm, phasemeter
|
||||
and rgb_waveform the bytes they change, except the asset blob at 0x08FC2D00,
|
||||
and advanced_waveforms the bytes they change, except the asset blob at 0x08FC2D00,
|
||||
which starts with a copy of the firmware's resource table: the browser makes
|
||||
it from the user's application (the port of patch_cdj900nxs.assets()).
|
||||
The SHA-256 of the finished application for every combination is in data.js
|
||||
@@ -188,7 +188,7 @@ def main():
|
||||
upstream, up_apps = {}, {(): stock}
|
||||
for k in range(1, len(p.UPSTREAM) + 1):
|
||||
for up in itertools.combinations(p.UPSTREAM, k):
|
||||
app = p.patch(stock, list(up))
|
||||
app = p.patch(stock, list(up), public=True)
|
||||
blob_len = len(app) - (p.DATA_BASE - BASE)
|
||||
masked = bytearray(app)
|
||||
masked[p.DATA_BASE - BASE:] = bytes(blob_len)
|
||||
@@ -200,7 +200,7 @@ def main():
|
||||
up_apps[up] = app
|
||||
print('%-40s %3d operations' % (','.join(up), len(ops)))
|
||||
for combo in combos:
|
||||
final = p.patch(stock, list(combo))
|
||||
final = p.patch(stock, list(combo), public=True)
|
||||
ops = ops_for(stock, final, boxes if 'hotcuekeys' in combo else [])
|
||||
if apply_ops(stock, stock, ops, hk, len(final)) != final:
|
||||
raise SystemExit('%s: the operations do not give the patcher\'s result' % ','.join(combo))
|
||||
@@ -216,8 +216,8 @@ def main():
|
||||
if up:
|
||||
expect[','.join(up)] = sha(base)
|
||||
for combo in combos:
|
||||
final = p.patch(stock, list(up) + list(combo))
|
||||
alone = p.patch(stock, list(combo))
|
||||
final = p.patch(stock, list(up) + list(combo), public=True)
|
||||
alone = p.patch(stock, list(combo), public=True)
|
||||
ops = ops_for(stock, alone, boxes if 'hotcuekeys' in combo else [])
|
||||
if apply_ops(base, stock, ops, hk, len(alone)) != final:
|
||||
raise SystemExit('%s + %s: differs from the patcher' % (','.join(up), ','.join(combo)))
|
||||
|
||||
+8
-8
@@ -8,9 +8,9 @@
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="style.css?v=1.1.1">
|
||||
<script src="assets/versions.js?v=1.1.1"></script>
|
||||
<script src="script.js?v=1.1.1"></script>
|
||||
<link rel="stylesheet" href="style.css?v=1.2.0">
|
||||
<script src="assets/versions.js?v=1.2.0"></script>
|
||||
<script src="script.js?v=1.2.0"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -106,17 +106,17 @@
|
||||
<div class="card-head">
|
||||
<div class="icon" aria-hidden="true">🌊</div>
|
||||
<div>
|
||||
<h3>3-band waveform <code>waveform3band</code></h3>
|
||||
<div class="by">ours · made with Claude Code · needs <code>rgb_waveform</code></div>
|
||||
<h3>Waveform modes, 3-band <code>advanced_waveforms</code></h3>
|
||||
<div class="by">ours · made with Claude Code · on arnoldasr's advanced waveforms</div>
|
||||
</div>
|
||||
<div class="meta"><span class="player no">emulator only</span><span class="state planned">in testing</span></div>
|
||||
</div>
|
||||
<p>The three-band waveform of the newest players: lows blue, mids amber, highs white, drawn as layers so kicks, vocals and hi-hats can be told apart at a glance.</p>
|
||||
<p>A new UTILITY › WAVEFORM item in advanced waveforms: BLUE (the player's own), RGB or 3BAND — the three-band waveform of the newest players, lows blue, mids amber, highs white, drawn as layers so kicks, vocals and hi-hats can be told apart at a glance. The choice is kept when the player is off.</p>
|
||||
<div class="vs stack">
|
||||
<figure class="mod"><img src="assets/waveform-3band.png" alt="Scrolling waveform in three bands: blue lows, amber mids, white highs"><figcaption>In the emulator (bands from the whiteness, see below)</figcaption></figure>
|
||||
</div>
|
||||
<ul class="diff">
|
||||
<li><span class="k">Now</span><span>Built: each column's three bands come from the colour detail rekordbox exports (red lows, green mids, blue highs), which the RGB waveform already fetches; without it, from the waveform's whiteness. rekordbox's own 3-band data sits in a file the 900NXS never opens.</span></li>
|
||||
<li><span class="k">Now</span><span>Built and working in the emulator: each column's three bands come from the colour detail rekordbox exports (red lows, green mids, blue highs), which advanced waveforms already fetches; without it, from the waveform's whiteness. rekordbox's own 3-band data sits in a file the 900NXS never opens.</span></li>
|
||||
<li><span class="k new">Next</span><span>Testing on a player with real colour detail, then reading the true 3-band data.</span></li>
|
||||
</ul>
|
||||
</article>
|
||||
@@ -128,7 +128,7 @@
|
||||
<div class="wrap cols">
|
||||
<div>
|
||||
<div class="ai"><span class="dot"></span>Made with Claude Code · Claude Opus 5.5</div>
|
||||
<p>This website, the builder, our mods and the patcher were developed with Claude Code (Anthropic's AI coding assistant, model Claude Opus 5.5), by reverse engineering the firmware in an emulator. The mods <code>rgb_waveform</code>, <code>extended_bpm</code> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
|
||||
<p>This website, the builder, our mods and the patcher were developed with Claude Code (Anthropic's AI coding assistant, model Claude Opus 5.5), by reverse engineering the firmware in an emulator. The mods <code>advanced_waveforms</code>, <code>extended_bpm</code> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4>Disclaimer</h4>
|
||||
|
||||
Reference in new issue
Block a user