site 1.6.0 (local): four mods stable, the rest experimental; builder ticks all and warns

- Stable: extended BPM, boot text, LED animation, cue colours; every other mod
  experimental (main page, docs, builder).
- Builder: every mod ticked at the start; a red warning across the top: for
  home use, not for clubs or gigs.
- Intro: the emulator links to QEMU.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Thiemo TizianiandClaude Opus 5.5 committed 2026-10-20 19:07:47 +02:00
1 parent dbcbe8adf3
commit 9787d88e95
10 files changed
+61 -34

No files matched your search

+12 -3
View File
@@ -1,8 +1,17 @@
// Generated by tools/make_builder_data.py from tools/changelog.json and the mods' versions. // Generated by tools/make_builder_data.py from tools/changelog.json and the mods' versions.
window.CDJ_VERSIONS = { window.CDJ_VERSIONS = {
"site": "1.5.1", "site": "1.6.0",
"date": "2026-10-20", "date": "2026-10-20",
"log": [ "log": [
{
"version": "1.6.0",
"date": "2026-10-20",
"changes": [
"Stable are extended BPM, boot text, LED animation and cue colours; every other mod is experimental.",
"Builder: every mod ticked at the start, and a warning across the top: for home use, not for clubs or gigs.",
"The emulator in the intro links to QEMU."
]
},
{ {
"version": "1.5.1", "version": "1.5.1",
"date": "2026-10-20", "date": "2026-10-20",
@@ -137,8 +146,8 @@ window.CDJ_VERSIONS = {
"ledsaver": "1.0.0", "ledsaver": "1.0.0",
"keynotation": "1.2.1", "keynotation": "1.2.1",
"usbautoload": "0.1.0", "usbautoload": "0.1.0",
"quicksearch": "0.1.0", "quicksearch": "0.2.0",
"cuenames": "0.1.0", "cuenames": "0.1.1",
"endwarn": "0.1.0", "endwarn": "0.1.0",
"played": "0.3.1", "played": "0.3.1",
"credit": "1.0.0" "credit": "1.0.0"
+7 -6
View File
@@ -6,12 +6,12 @@
<title>Pionaarr Mods Builder</title> <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."> <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="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.5.1"> <link rel="stylesheet" href="style.css?v=1.6.0">
<script src="assets/versions.js?v=1.5.1"></script> <script src="assets/versions.js?v=1.6.0"></script>
<script src="script.js?v=1.5.1"></script> <script src="script.js?v=1.6.0"></script>
<script src="builder/data.js?v=1.5.1"></script> <script src="builder/data.js?v=1.6.0"></script>
<script src="builder/builder.js?v=1.5.1"></script> <script src="builder/builder.js?v=1.6.0"></script>
<script src="builder/ui.js?v=1.5.1"></script> <script src="builder/ui.js?v=1.6.0"></script>
</head> </head>
<body> <body>
@@ -29,6 +29,7 @@
</header> </header>
<main class="wrap builder"> <main class="wrap builder">
<div class="warnbar" role="note"><strong>For the living room, not the booth.</strong> These mods are made for home use and for trying things out. They are not proven for clubs, gigs or any other professional use: a player can behave unexpectedly or stop. At a gig, play the official firmware.</div>
<div class="eyebrow">Builder</div> <div class="eyebrow">Builder</div>
<h1>Build your update</h1> <h1>Build your update</h1>
<p class="lead">Choose the official CDJ-900NXS <strong>1.31</strong> update, tick the mods, download your <code>C900NXS.UPD</code>. It all runs in your browser.</p> <p class="lead">Choose the official CDJ-900NXS <strong>1.31</strong> update, tick the mods, download your <code>C900NXS.UPD</code>. It all runs in your browser.</p>
+3 -3
View File
@@ -5,9 +5,9 @@
var MODS = [ var MODS = [
{ id: 'extended_bpm', name: 'Extended BPM', by: 'arnoldasr', state: 'stable', { id: 'extended_bpm', name: 'Extended BPM', by: 'arnoldasr', state: 'stable',
what: 'BPM with two decimals: the tenths as a small digit above, the hundredths below.' }, what: 'BPM with two decimals: the tenths as a small digit above, the hundredths below.' },
{ id: 'phasemeter', name: 'Phase meter', by: 'arnoldasr', state: 'stable', { id: 'phasemeter', name: 'Phase meter', by: 'arnoldasr', state: 'experimental',
what: 'Two-line phase meter instead of the four boxes; UTILITY › PHASE METER (was SLIP FLASHING) switches it.' }, what: 'Two-line phase meter instead of the four boxes; UTILITY › PHASE METER (was SLIP FLASHING) switches it.' },
{ id: 'advanced_waveforms', name: 'Advanced waveforms', by: 'ours', state: 'stable', { id: 'advanced_waveforms', name: 'Advanced waveforms', by: 'ours', state: 'experimental',
what: 'The big waveform in RGB colours, the overview as a red-to-white gradient.' }, 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', { 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).' }, what: 'TRACK SEARCH ◀◀ ▶▶ jumps 1/2/4/8 beats along the beat grid, at once and in phase. UTILITY › BEAT JUMP (was SCREEN SAVER).' },
@@ -23,7 +23,7 @@
what: 'The boot screen says “Pionaarr Mods 1.0” instead of “Ver 1.31”.' } what: 'The boot screen says “Pionaarr Mods 1.0” instead of “Ver 1.31”.' }
]; ];
var chosen = {}; var chosen = {};
MODS.forEach(function (m) { chosen[m.id] = m.state === 'stable'; }); MODS.forEach(function (m) { chosen[m.id] = true; }); // every mod ticked at the start
var stock = false, before = null; // the stock switch, and the picks it put away var stock = false, before = null; // the stock switch, and the picks it put away
function setStock(on) { function setStock(on) {
+3 -3
View File
@@ -6,9 +6,9 @@
<title>Datenschutzerklärung · Pionaarr Mods</title> <title>Datenschutzerklärung · Pionaarr Mods</title>
<meta name="description" content="Datenschutzerklärung von Pionaarr Mods."> <meta name="description" content="Datenschutzerklärung von Pionaarr Mods.">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml"> <link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.5.1"> <link rel="stylesheet" href="style.css?v=1.6.0">
<script src="assets/versions.js?v=1.5.1"></script> <script src="assets/versions.js?v=1.6.0"></script>
<script src="script.js?v=1.5.1"></script> <script src="script.js?v=1.6.0"></script>
</head> </head>
<body> <body>
+7 -7
View File
@@ -6,9 +6,9 @@
<title>Pionaarr Mods Docs</title> <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."> <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="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.5.1"> <link rel="stylesheet" href="style.css?v=1.6.0">
<script src="assets/versions.js?v=1.5.1"></script> <script src="assets/versions.js?v=1.6.0"></script>
<script src="script.js?v=1.5.1"></script> <script src="script.js?v=1.6.0"></script>
</head> </head>
<body> <body>
@@ -87,7 +87,7 @@
<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> <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 ===================== --> <!-- ===================== mods ===================== -->
<h2 id="advanced_waveforms">advanced_waveforms <span class="badge author">Pionaarr mod</span></h2> <h2 id="advanced_waveforms">advanced_waveforms <span class="badge author">Pionaarr mod</span> <span class="state experimental">experimental</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. Called <code>rgb_waveform</code> before site 1.2.0; the patcher still takes that name. 1.0.1: rekordbox's colour data is used also when it is a few columns shorter than the waveform, which is common; such tracks showed the plain gradient colours before. In testing, not in the builder yet: a WAVEFORM item in UTILITY with BLUE / RGB / 3BAND; 3BAND draws rekordbox's 3-band data (lows blue, mids amber, highs white), the overview too.</p> <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. Called <code>rgb_waveform</code> before site 1.2.0; the patcher still takes that name. 1.0.1: rekordbox's colour data is used also when it is a few columns shorter than the waveform, which is common; such tracks showed the plain gradient colours before. In testing, not in the builder yet: a WAVEFORM item in UTILITY with BLUE / RGB / 3BAND; 3BAND draws rekordbox's 3-band data (lows blue, mids amber, highs white), the overview too.</p>
<figure class="shot"><img src="assets/card-wave-rgb.png" alt="RGB detail waveform"><figcaption>RGB.</figcaption></figure> <figure class="shot"><img src="assets/card-wave-rgb.png" alt="RGB detail waveform"><figcaption>RGB.</figcaption></figure>
<figure class="shot"><img src="assets/card-wave-3band.png" alt="3-band detail waveform"><figcaption>3BAND, in testing.</figcaption></figure> <figure class="shot"><img src="assets/card-wave-3band.png" alt="3-band detail waveform"><figcaption>3BAND, in testing.</figcaption></figure>
@@ -95,7 +95,7 @@
<h2 id="extended_bpm">extended_bpm <span class="badge author">arnoldasr</span></h2> <h2 id="extended_bpm">extended_bpm <span class="badge author">arnoldasr</span></h2>
<p>The BPM to two decimals: the tenths as a small digit above, the hundredths in the place of the stock decimal.</p> <p>The BPM to two decimals: the tenths as a small digit above, the hundredths in the place of the stock decimal.</p>
<h2 id="phasemeter">phasemeter <span class="badge author">arnoldasr</span></h2> <h2 id="phasemeter">phasemeter <span class="badge author">arnoldasr</span> <span class="state experimental">experimental</span></h2>
<p>A two-line phase meter instead of the four boxes: orange for the master, blue for this deck, each with a marker. UTILITY › SLIP FLASHING becomes <strong>PHASE METER</strong>: ON shows the lines, OFF the stock boxes. The orange marker needs another player as tempo master. In testing, not in the builder yet: PHASE METER gets a third value, REVERSE (the markers run right to left), and the bar countdown right of the meter sits a few pixels further right, clear of the lines.</p> <p>A two-line phase meter instead of the four boxes: orange for the master, blue for this deck, each with a marker. UTILITY › SLIP FLASHING becomes <strong>PHASE METER</strong>: ON shows the lines, OFF the stock boxes. The orange marker needs another player as tempo master. In testing, not in the builder yet: PHASE METER gets a third value, REVERSE (the markers run right to left), and the bar countdown right of the meter sits a few pixels further right, clear of the lines.</p>
<figure class="shot"><img src="assets/utility-phase.png" alt="UTILITY with PHASE METER"><figcaption>UTILITY › PHASE METER.</figcaption></figure> <figure class="shot"><img src="assets/utility-phase.png" alt="UTILITY with PHASE METER"><figcaption>UTILITY › PHASE METER.</figcaption></figure>
@@ -247,9 +247,9 @@
<table> <table>
<thead><tr><th>Mod</th><th>By</th><th>Status</th><th>Player</th></tr></thead> <thead><tr><th>Mod</th><th>By</th><th>Status</th><th>Player</th></tr></thead>
<tbody> <tbody>
<tr><td><code>advanced_waveforms</code></td><td>Pionaarr mod</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>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>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>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>phasemeter</code></td><td>arnoldasr</td><td><span class="state experimental">experimental</span></td><td><span class="player">ran on a player</span></td></tr>
<tr><td><code>cuecolours</code></td><td>Pionaarr mod</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>Pionaarr mod</td><td><span class="state stable">stable</span></td><td><span class="player">ran on a player</span></td></tr>
<tr><td><code>hotcuekeys</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>hotcuekeys</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>beatjump</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>beatjump</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>
+3 -3
View File
@@ -6,9 +6,9 @@
<title>Impressum · Pionaarr Mods</title> <title>Impressum · Pionaarr Mods</title>
<meta name="description" content="Impressum und Offenlegung von Pionaarr Mods."> <meta name="description" content="Impressum und Offenlegung von Pionaarr Mods.">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml"> <link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.5.1"> <link rel="stylesheet" href="style.css?v=1.6.0">
<script src="assets/versions.js?v=1.5.1"></script> <script src="assets/versions.js?v=1.6.0"></script>
<script src="script.js?v=1.5.1"></script> <script src="script.js?v=1.6.0"></script>
</head> </head>
<body> <body>
+6 -6
View File
@@ -6,9 +6,9 @@
<title>Pionaarr Mods</title> <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."> <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="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.5.1"> <link rel="stylesheet" href="style.css?v=1.6.0">
<script src="assets/versions.js?v=1.5.1"></script> <script src="assets/versions.js?v=1.6.0"></script>
<script src="script.js?v=1.5.1"></script> <script src="script.js?v=1.6.0"></script>
</head> </head>
<body> <body>
@@ -30,7 +30,7 @@
<div class="wrap"> <div class="wrap">
<span class="lcd"><i></i>CDJ-900NXS · firmware 1.31</span> <span class="lcd"><i></i>CDJ-900NXS · firmware 1.31</span>
<h1>Pionaarr <span class="r">Mods</span></h1> <h1>Pionaarr <span class="r">Mods</span></h1>
<p class="lead">Firmware mods for the Pioneer CDJ-900NXS. We took the player's firmware apart in an emulator and added what newer Pioneer players have: hot cues on the deck, beat jump, colour and 3-band waveforms, keys in Camelot colours and more.</p> <p class="lead">Firmware mods for the Pioneer CDJ-900NXS. We took the player's firmware apart in an <a href="https://www.qemu.org/">emulator</a> (QEMU, extended for the player) and added what newer Pioneer players have: hot cues on the deck, beat jump, colour and 3-band waveforms, keys in Camelot colours and more.</p>
<p class="lead">Pick the mods you want in the builder. It patches the official 1.31 update in your browser and gives you a normal <code>C900NXS.UPD</code> to install like any update. The boot loader is never touched, so you can always go back to stock.</p> <p class="lead">Pick the mods you want in the builder. It patches the official 1.31 update in your browser and gives you a normal <code>C900NXS.UPD</code> to install like any update. The boot loader is never touched, so you can always go back to stock.</p>
<div class="cta"> <div class="cta">
<a class="btn primary play" href="builder.html"><span class="play-key" aria-hidden="true"><svg viewBox="0 0 17 10"><path d="M0 0v10l8-5z"/><rect x="10" y="0" width="2.5" height="10"/><rect x="14.5" y="0" width="2.5" height="10"/></svg></span>Open the builder</a> <a class="btn primary play" href="builder.html"><span class="play-key" aria-hidden="true"><svg viewBox="0 0 17 10"><path d="M0 0v10l8-5z"/><rect x="10" y="0" width="2.5" height="10"/><rect x="14.5" y="0" width="2.5" height="10"/></svg></span>Open the builder</a>
@@ -77,7 +77,7 @@
<article class="card"> <article class="card">
<div class="card-head"> <div class="card-head">
<h3>Advanced waveforms</h3> <h3>Advanced waveforms</h3>
<div class="meta"><span class="state stable">stable</span></div> <div class="meta"><span class="state experimental">experimental</span></div>
</div> </div>
<div class="by">Pionaarr mod · <code>advanced_waveforms</code></div> <div class="by">Pionaarr mod · <code>advanced_waveforms</code></div>
<figure class="tshot"><img src="assets/card-wave-rgb.png" alt="RGB waveform" loading="lazy"><figcaption>RGB</figcaption></figure> <figure class="tshot"><img src="assets/card-wave-rgb.png" alt="RGB waveform" loading="lazy"><figcaption>RGB</figcaption></figure>
@@ -206,7 +206,7 @@
<article class="card"> <article class="card">
<div class="card-head"> <div class="card-head">
<h3>Phase meter</h3> <h3>Phase meter</h3>
<div class="meta"><span class="state stable">stable</span></div> <div class="meta"><span class="state experimental">experimental</span></div>
</div> </div>
<div class="by">by arnoldasr · additions by us · <code>phasemeter</code></div> <div class="by">by arnoldasr · additions by us · <code>phasemeter</code></div>
<figure class="tshot"><img src="assets/card-phase.png" alt="Two-line phase meter, the bar countdown beside it" loading="lazy"></figure> <figure class="tshot"><img src="assets/card-phase.png" alt="Two-line phase meter, the bar countdown beside it" loading="lazy"></figure>
+8
View File
@@ -561,3 +561,11 @@ footer .legal { margin-top: 14px; font-size: .85rem; }
.picks { transition: max-height .3s ease, opacity .25s ease; max-height: 8000px; } .picks { transition: max-height .3s ease, opacity .25s ease; max-height: 8000px; }
.picks.collapsed { max-height: 0; opacity: 0; overflow: hidden; margin: 0; pointer-events: none; } .picks.collapsed { max-height: 0; opacity: 0; overflow: hidden; margin: 0; pointer-events: none; }
@media (prefers-reduced-motion: reduce) { .picks { transition: none; } } @media (prefers-reduced-motion: reduce) { .picks { transition: none; } }
/* builder: the warning across the top */
.warnbar {
margin: 22px 0 26px; padding: 14px 18px; border-radius: 8px;
background: #b3141b; color: #fff; border: 1px solid #e0343b; font-size: .98rem; line-height: 1.45;
box-shadow: 0 0 0 1px rgba(0,0,0,.2), 0 8px 24px rgba(179,20,27,.25);
}
.warnbar strong { font-family: var(--display); letter-spacing: .02em; text-transform: uppercase; margin-right: .4em; }
+9
View File
@@ -1,6 +1,15 @@
{ {
"_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.", "_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": [ "site": [
{
"version": "1.6.0",
"date": "2026-10-20",
"changes": [
"Stable are extended BPM, boot text, LED animation and cue colours; every other mod is experimental.",
"Builder: every mod ticked at the start, and a warning across the top: for home use, not for clubs or gigs.",
"The emulator in the intro links to QEMU."
]
},
{ {
"version": "1.5.1", "version": "1.5.1",
"date": "2026-10-20", "date": "2026-10-20",
+3 -3
View File
@@ -6,9 +6,9 @@
<title>Pionaarr Mods Upcoming</title> <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."> <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="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.5.1"> <link rel="stylesheet" href="style.css?v=1.6.0">
<script src="assets/versions.js?v=1.5.1"></script> <script src="assets/versions.js?v=1.6.0"></script>
<script src="script.js?v=1.5.1"></script> <script src="script.js?v=1.6.0"></script>
</head> </head>
<body> <body>