site 1.4.2: Pionaarr mods, player blue, short tiles, CUE logo, legal pages, local fonts

- advanced_waveforms listed as a Pionaarr mod; "ours" is "Pionaarr mod" everywhere.
- The player's blue (title bar) instead of the orange; flat CUE key as logo and favicon.
- Mod tiles: one emulator shot and one or two sentences each; 3-band shown (in testing).
- No command line on the main page (it is in the docs); round BEAT DIVIDE keys for the LEDs.
- Impressum and Datenschutzerklaerung (AT/DE); fonts served from assets/fonts (OFL).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Thiemo TizianiandClaude Opus 5.5 committed 2026-10-20 11:02:01 +02:00
1 parent 5ee521429b
commit 6ddc37bc66
31 files changed
+642 -251

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64">
<circle cx="32" cy="32" r="31" fill="#0b0c10"/>
<circle cx="32" cy="32" r="28" fill="none" stroke="#ff8a1f" stroke-width="5"/>
<circle cx="32" cy="32" r="22" fill="#16181d"/>
<text x="32" y="38.5" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-weight="700" font-size="17" fill="#eef0f4" letter-spacing=".5">CUE</text>
</svg>

After

Width:  |  Height:  |  Size: 439 B

+93
View File
@@ -0,0 +1,93 @@
Google Inc.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+93
View File
@@ -0,0 +1,93 @@
Google Inc.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+93
View File
@@ -0,0 +1,93 @@
Google Inc.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+14 -1
View File
@@ -1,8 +1,21 @@
// Generated by tools/make_builder_data.py from tools/changelog.json and the mods' versions.
window.CDJ_VERSIONS = {
"site": "1.4.1",
"site": "1.4.2",
"date": "2026-10-20",
"log": [
{
"version": "1.4.2",
"date": "2026-10-20",
"changes": [
"Advanced waveforms is listed as a Pionaarr mod everywhere; our mods are called Pionaarr mods instead of \"ours\".",
"The logo and the favicon are the player's CUE key with its orange ring lit.",
"Shorter mod tiles, one emulator shot each; the 3-band waveform shown with advanced waveforms (still in testing).",
"The player's blue instead of the orange; no command line on the main page (it is in the docs).",
"Docs: the hot cue LEDs drawn as round BEAT DIVIDE keys with their labels.",
"Impressum and privacy policy (German, for Austria and Germany).",
"Fonts come from this server: no more requests to Google Fonts."
]
},
{
"version": "1.4.1",
"date": "2026-10-20",
+10 -11
View File
@@ -5,21 +5,19 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<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="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;600;700&family=Chakra+Petch:wght@600;700&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css?v=1.4.1">
<script src="assets/versions.js?v=1.4.1"></script>
<script src="script.js?v=1.4.1"></script>
<script src="builder/data.js?v=1.4.1"></script>
<script src="builder/builder.js?v=1.4.1"></script>
<script src="builder/ui.js?v=1.4.1"></script>
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.4.2">
<script src="assets/versions.js?v=1.4.2"></script>
<script src="script.js?v=1.4.2"></script>
<script src="builder/data.js?v=1.4.2"></script>
<script src="builder/builder.js?v=1.4.2"></script>
<script src="builder/ui.js?v=1.4.2"></script>
</head>
<body>
<header class="top">
<div class="wrap">
<a class="brand" href="index.html"><span class="disc" aria-hidden="true"></span><span>Pionaarr Mods</span></a>
<a class="brand" href="index.html"><span class="cue-key" aria-hidden="true">CUE</span><span>Pionaarr Mods</span></a>
<nav class="tabs" aria-label="Sections">
<a href="index.html">Mods</a>
<a href="builder.html" aria-current="page">Builder</a>
@@ -102,11 +100,12 @@
<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> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>; <code>advanced_waveforms</code> is based on his <code>rgb_waveform</code> and is now updated and published by us.</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> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
</div>
<div>
<h4>Disclaimer</h4>
<p>Unofficial. Not affiliated with or endorsed by Pioneer DJ or AlphaTheta; CDJ and rekordbox are their trademarks. Flashing modified firmware can leave your player unusable. Everything here is provided as is, without warranty, and used at your own risk.</p>
<p class="legal"><a href="impressum.html">Impressum</a> · <a href="datenschutz.html">Datenschutz</a></p>
</div>
</div>
</footer>
+2 -2
View File
@@ -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: 'advanced_waveforms', name: 'Advanced waveforms', by: 'based', state: 'stable',
{ id: 'advanced_waveforms', name: 'Advanced waveforms', by: 'ours', 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).' },
@@ -76,7 +76,7 @@
'<span class="pick-main"><span class="pick-name">' + m.name + ' <code>' + m.id + '</code>' +
(window.CDJ_VERSIONS && window.CDJ_VERSIONS.mods[m.id] ? ' <span class="ver">v' + window.CDJ_VERSIONS.mods[m.id] + '</span>' : '') + '</span>' +
'<span class="pick-what">' + m.what + '</span>' +
'<span class="pick-by">' + (m.by === 'ours' ? 'ours · made with Claude Code' : m.by === 'based' ? 'ours · based on arnoldasr, updated and published by us' : 'by arnoldasr') +
'<span class="pick-by">' + (m.by === 'ours' ? 'Pionaarr mod · made with Claude Code' : 'by arnoldasr') +
(m.needs ? ' · needs <code>' + m.needs + '</code>' : '') + '</span></span>' +
'<span class="state ' + m.state + '">' + m.state + '</span>';
row.querySelector('input').disabled = stock;
+83
View File
@@ -0,0 +1,83 @@
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<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.4.2">
<script src="assets/versions.js?v=1.4.2"></script>
<script src="script.js?v=1.4.2"></script>
</head>
<body>
<header class="top">
<div class="wrap">
<a class="brand" href="index.html"><span class="cue-key" aria-hidden="true">CUE</span><span>Pionaarr Mods</span></a>
<nav class="tabs" aria-label="Sections">
<a href="index.html">Mods</a>
<a href="builder.html">Builder</a>
<a href="upcoming.html">Upcoming</a>
<a href="docs.html">Docs</a>
</nav>
<button class="theme-btn" type="button" aria-label="Switch light / dark">☀</button>
</div>
</header>
<main class="wrap legal-page">
<h1>Datenschutzerklärung</h1>
<p class="lead">Diese Website erhebt so wenig Daten wie möglich: keine Cookies, keine Statistik, kein Tracking, keine Inhalte von Drittanbietern.</p>
<h2>Verantwortlicher</h2>
<p>Thiemo Tiziani<br>
Pufferweg 2<br>
4400 Steyr<br>
Österreich<br>
E-Mail: <a href="mailto:thiemo.tiziani@thiemoo.at">thiemo.tiziani@thiemoo.at</a></p>
<h2>Hosting</h2>
<p>Die Website liegt auf einem Server der Hetzner Online GmbH, Industriestr. 25, 91710 Gunzenhausen, Deutschland, in einem Rechenzentrum in Deutschland. Hetzner verarbeitet die unten genannten Daten nur in unserem Auftrag (Art. 28 DSGVO).</p>
<h2>Server-Logdateien</h2>
<p>Bei jedem Aufruf speichert der Webserver automatisch:</p>
<ul>
<li>IP-Adresse,</li>
<li>Datum und Uhrzeit,</li>
<li>aufgerufene Datei, Statuscode und übertragene Datenmenge,</li>
<li>zuvor besuchte Seite (Referrer), falls der Browser sie übermittelt,</li>
<li>Browser und Betriebssystem (User-Agent).</li>
</ul>
<p>Zweck ist der sichere und stabile Betrieb der Website, etwa um Fehler und Angriffe zu erkennen. Rechtsgrundlage ist unser berechtigtes Interesse daran (Art. 6 Abs. 1 lit. f DSGVO). Die Daten werden nicht ausgewertet, nicht zu Statistiken zusammengeführt, nicht weitergegeben und nach 14 Tagen automatisch gelöscht.</p>
<h2>Builder</h2>
<p>Die Firmware-Datei, die Sie im Builder wählen, wird ausschließlich in Ihrem Browser verarbeitet. Sie wird nicht an den Server oder an Dritte übertragen.</p>
<h2>Lokale Speicherung</h2>
<p>Wenn Sie zwischen hellem und dunklem Design wechseln, merkt sich Ihr Browser diese Wahl im lokalen Speicher (<code>localStorage</code>, Eintrag <code>theme</code>). Der Eintrag bleibt auf Ihrem Gerät, wird nicht übertragen und lässt sich über die Browser-Einstellungen löschen. Er ist für die von Ihnen gewünschte Funktion nötig (§ 165 Abs. 3 TKG 2021, § 25 Abs. 2 TDDDG).</p>
<h2>Schriften und externe Links</h2>
<p>Alle Schriften werden von diesem Server geladen; es besteht keine Verbindung zu Google Fonts oder anderen Diensten. Links zu anderen Websites (etwa GitHub) werden erst beim Anklicken aufgerufen; dort gilt die Datenschutzerklärung des jeweiligen Anbieters.</p>
<h2>Ihre Rechte</h2>
<p>Sie haben das Recht auf Auskunft, Berichtigung, Löschung, Einschränkung der Verarbeitung, Datenübertragbarkeit und Widerspruch (Art. 15–21 DSGVO). Schreiben Sie dazu an die oben genannte E-Mail-Adresse. Sie können sich außerdem bei einer Datenschutz-Aufsichtsbehörde beschweren, in Österreich bei der Datenschutzbehörde, Barichgasse 40–42, 1030 Wien, <a href="https://www.dsb.gv.at">dsb.gv.at</a>.</p>
<p class="hint">Stand: Oktober 2026</p>
</main>
<footer>
<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> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
</div>
<div>
<h4>Disclaimer</h4>
<p>Unofficial. Not affiliated with or endorsed by Pioneer DJ or AlphaTheta; CDJ and rekordbox are their trademarks. Flashing modified firmware can leave your player unusable. Everything here is provided as is, without warranty, and used at your own risk.</p>
<p class="legal"><a href="impressum.html">Impressum</a> · <a href="datenschutz.html">Datenschutz</a></p>
</div>
</div>
</footer>
</body>
</html>
+26 -27
View File
@@ -5,18 +5,16 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<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="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;600;700&family=Chakra+Petch:wght@600;700&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css?v=1.4.1">
<script src="assets/versions.js?v=1.4.1"></script>
<script src="script.js?v=1.4.1"></script>
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.4.2">
<script src="assets/versions.js?v=1.4.2"></script>
<script src="script.js?v=1.4.2"></script>
</head>
<body>
<header class="top">
<div class="wrap">
<a class="brand" href="index.html"><span class="disc" aria-hidden="true"></span><span>Pionaarr Mods</span></a>
<a class="brand" href="index.html"><span class="cue-key" aria-hidden="true">CUE</span><span>Pionaarr Mods</span></a>
<nav class="tabs" aria-label="Sections">
<a href="index.html">Mods</a>
<a href="builder.html">Builder</a>
@@ -83,8 +81,8 @@
<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="advanced_waveforms">advanced_waveforms <span class="badge author">ours · based on 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. It is based on arnoldasr's <code>rgb_waveform</code> (the name before site 1.2.0, which the patcher still takes); we took it over and publish its updates. 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. A WAVEFORM item in UTILITY with BLUE / RGB / 3BAND is in testing, see <a href="upcoming.html">Upcoming</a>.</p>
<h2 id="advanced_waveforms">advanced_waveforms <span class="badge author">Pionaarr mod</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. 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>
@@ -94,7 +92,7 @@
<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.</p>
<figure class="shot"><img src="assets/utility-phase.png" alt="UTILITY with PHASE METER"><figcaption>UTILITY › PHASE METER.</figcaption></figure>
<h2 id="cuecolours">cuecolours <span class="badge author">ours</span></h2>
<h2 id="cuecolours">cuecolours <span class="badge author">Pionaarr mod</span></h2>
<p>When a track is loaded the player asks its database for the cues. This mod also asks for the extended cue list (the one newer players read from rekordbox's export), which carries the colours and the hot cues.</p>
<ul>
<li><strong>Memory cues</strong> are drawn in the colour set in rekordbox, on the overview and on the big waveform. A memory cue without a colour, or one stored on the player, stays red.</li>
@@ -103,7 +101,7 @@
<figure class="shot"><img src="assets/hotcue-overview.png" alt="Overview with coloured memory cues and hot cues A to F"><figcaption>Coloured memory cues and hot cues A–F on the overview.</figcaption></figure>
<!-- ===================== hot cue keys ===================== -->
<h2 id="hotcuekeys">hotcuekeys <span class="badge author">ours</span> <span class="state experimental">experimental</span></h2>
<h2 id="hotcuekeys">hotcuekeys <span class="badge author">Pionaarr mod</span> <span class="state experimental">experimental</span></h2>
<p>The CDJ-900NXS has no hot cue pads. This mod lends it three: the top three <strong>BEAT DIVIDE</strong> keys left of the jog. It needs <code>cuecolours</code>, which reads the hot cues from your USB.</p>
<figure class="shot"><img src="assets/utility-hotcue.png" alt="UTILITY with HOT CUE KEYS"><figcaption>UTILITY › HOT CUE KEYS.</figcaption></figure>
@@ -165,10 +163,10 @@
<h3 id="hk-leds">The LEDs</h3>
<p>In the hot key mode the LEDs of 3/4, 1/3 and 1/2 show hot cues A–C; 1/4 and 1/8 are off (SLIP no longer changes them):</p>
<div class="leds">
<span class="led"><i></i> off — no hot cue</span>
<span class="led"><i class="dim"></i> dim — hot cue there</span>
<span class="led"><i class="blink"></i> blinking — pressed, set, deleted or being loaded</span>
<span class="led"><i class="blink"></i> blinking slowly — a gate held (0.5 s or longer)</span>
<span class="led"><i>1/4</i> off — no hot cue</span>
<span class="led"><i class="dim">3/4</i> dim — hot cue there</span>
<span class="led"><i class="blink">1/3</i> blinking — pressed, set, deleted or being loaded</span>
<span class="led"><i class="slow">1/2</i> blinking slowly — a gate held (0.5 s or longer)</span>
</div>
<h3 id="hk-limits">Good to know</h3>
@@ -179,7 +177,7 @@
<li>No slip hot cues yet: with SLIP on, a hot cue plays as without SLIP.</li>
</ul>
<h2 id="beatjump">beatjump <span class="badge author">ours</span> <span class="state experimental">experimental</span></h2>
<h2 id="beatjump">beatjump <span class="badge author">Pionaarr mod</span> <span class="state experimental">experimental</span></h2>
<p>The TRACK SEARCH keys ◀◀ / ▶▶ jump along the track's beat grid instead of changing the track. How far is chosen in UTILITY › <strong>BEAT JUMP</strong> (where SCREEN SAVER was): OFF, 1, 2, 4 or 8 beats; 4 until you choose, and your choice stays when the player is switched off.</p>
<ul>
<li>The jump is exactly that many grid beats, so with 4 or 8 the phase meter shows the same place in the bar after the jump; with 1 or 2 the beats still line up, the bar moves on by one or two beats.</li>
@@ -188,7 +186,7 @@
<li>It needs <code>hotcuekeys</code> (its engine makes the jumps) and <code>cuecolours</code>; the builder ticks them for you.</li>
</ul>
<h2 id="ledsaver">ledsaver <span class="badge author">ours</span></h2>
<h2 id="ledsaver">ledsaver <span class="badge author">Pionaarr mod</span></h2>
<p>UTILITY › <strong>LED ANIMATION</strong> (the last item) is <strong>ON</strong> from the first start; set it to OFF to switch it off (the player keeps the choice). When the player's own screen saver dims the display (5 minutes without a track loaded, or 100 minutes paused or at the cue), the LEDs play a loop of about four and a half seconds:</p>
<ul>
<li>the BEAT DIVIDE keys fade in a wave from top to bottom and back up,</li>
@@ -198,7 +196,7 @@
</ul>
<p>Any key ends it, as it ends the screen saver.</p>
<h2 id="keynotation">keynotation <span class="badge author">ours</span> <span class="state experimental">experimental</span></h2>
<h2 id="keynotation">keynotation <span class="badge author">Pionaarr mod</span> <span class="state experimental">experimental</span></h2>
<p>rekordbox writes each track's key as text, in whatever notation was set in its preferences when the stick was exported: <em>4A</em>, <em>9m</em> or <em>Fm</em> for the same key. This mod shows every key in one notation of your choice, UTILITY › <strong>KEY NOTATION</strong> (the last item):</p>
<ul>
<li><strong>CAMELOT</strong> (default) — 1A–12A minor, 1B–12B major, as on the Camelot wheel;</li>
@@ -211,7 +209,7 @@
<figure class="shot"><img src="assets/key-colour.png" alt="Key 5A in orange"><figcaption>5A in its wheel colour.</figcaption></figure>
<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">ours</span></h2>
<h2 id="credit">credit <span class="badge author">Pionaarr mod</span></h2>
<p>The boot screen says <em>Pionaarr Mods 1.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.0"><figcaption>The boot screen.</figcaption></figure>
@@ -223,15 +221,15 @@
<table>
<thead><tr><th>Mod</th><th>By</th><th>Status</th><th>Player</th></tr></thead>
<tbody>
<tr><td><code>advanced_waveforms</code></td><td>ours (based on 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>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>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>
<tr><td><code>hotcuekeys</code></td><td>ours</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>ours</td><td><span class="state experimental">experimental</span></td><td><span class="player">ran on a player</span></td></tr>
<tr><td><code>ledsaver</code></td><td>ours</td><td><span class="state stable">stable</span></td><td><span class="player">ran on a player</span></td></tr>
<tr><td><code>keynotation</code></td><td>ours</td><td><span class="state experimental">experimental</span></td><td><span class="player no">emulator only</span></td></tr>
<tr><td><code>credit</code></td><td>ours</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>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>ledsaver</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>keynotation</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>credit</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>
</tbody>
</table>
</div>
@@ -254,11 +252,12 @@
<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>extended_bpm</code> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>; <code>advanced_waveforms</code> is based on his <code>rgb_waveform</code> and is now updated and published by us.</p>
<p>This website, the builder, the mods <code>advanced_waveforms</code>, <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>extended_bpm</code> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
</div>
<div>
<h4>Disclaimer</h4>
<p>Unofficial. Not affiliated with or endorsed by Pioneer DJ or AlphaTheta; CDJ and rekordbox are their trademarks. Flashing modified firmware can leave your player unusable. Everything here is provided as is, without warranty, and used at your own risk.</p>
<p class="legal"><a href="impressum.html">Impressum</a> · <a href="datenschutz.html">Datenschutz</a></p>
</div>
</div>
</footer>
+61
View File
@@ -0,0 +1,61 @@
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<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.4.2">
<script src="assets/versions.js?v=1.4.2"></script>
<script src="script.js?v=1.4.2"></script>
</head>
<body>
<header class="top">
<div class="wrap">
<a class="brand" href="index.html"><span class="cue-key" aria-hidden="true">CUE</span><span>Pionaarr Mods</span></a>
<nav class="tabs" aria-label="Sections">
<a href="index.html">Mods</a>
<a href="builder.html">Builder</a>
<a href="upcoming.html">Upcoming</a>
<a href="docs.html">Docs</a>
</nav>
<button class="theme-btn" type="button" aria-label="Switch light / dark">☀</button>
</div>
</header>
<main class="wrap legal-page">
<h1>Impressum</h1>
<p class="lead">Offenlegung gemäß § 25 Mediengesetz (Österreich) und Angaben gemäß § 18 Abs. 1 Medienstaatsvertrag (Deutschland).</p>
<h2>Medieninhaber und Betreiber</h2>
<p>Thiemo Tiziani<br>
Pufferweg 2<br>
4400 Steyr<br>
Österreich</p>
<p>E-Mail: <a href="mailto:thiemo.tiziani@thiemoo.at">thiemo.tiziani@thiemoo.at</a></p>
<h2>Grundlegende Richtung</h2>
<p>Private, nicht kommerzielle Website mit Informationen zu inoffiziellen Firmware-Mods für den Pioneer DJ CDJ-900NXS und einem Werkzeug, das diese Mods im Browser auf das offizielle Firmware-Update anwendet.</p>
<h2>Hinweis</h2>
<p>Kein offizielles Angebot von Pioneer DJ oder AlphaTheta und mit diesen nicht verbunden. Für Inhalte externer Links sind deren Betreiber verantwortlich.</p>
</main>
<footer>
<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> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
</div>
<div>
<h4>Disclaimer</h4>
<p>Unofficial. Not affiliated with or endorsed by Pioneer DJ or AlphaTheta; CDJ and rekordbox are their trademarks. Flashing modified firmware can leave your player unusable. Everything here is provided as is, without warranty, and used at your own risk.</p>
<p class="legal"><a href="impressum.html">Impressum</a> · <a href="datenschutz.html">Datenschutz</a></p>
</div>
</div>
</footer>
</body>
</html>
+73 -175
View File
@@ -5,18 +5,16 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<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="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;600;700&family=Chakra+Petch:wght@600;700&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css?v=1.4.1">
<script src="assets/versions.js?v=1.4.1"></script>
<script src="script.js?v=1.4.1"></script>
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.4.2">
<script src="assets/versions.js?v=1.4.2"></script>
<script src="script.js?v=1.4.2"></script>
</head>
<body>
<header class="top">
<div class="wrap">
<a class="brand" href="index.html"><span class="disc" aria-hidden="true"></span><span>Pionaarr Mods</span></a>
<a class="brand" href="index.html"><span class="cue-key" aria-hidden="true">CUE</span><span>Pionaarr Mods</span></a>
<nav class="tabs" aria-label="Sections">
<a href="index.html" aria-current="page">Mods</a>
<a href="builder.html">Builder</a>
@@ -66,11 +64,10 @@
<section id="mods">
<div class="wrap">
<h2 class="section-title">The mods</h2>
<p class="section-sub">Each one next to stock. Two are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>, one is based on his work, the rest are ours.</p>
<p class="section-sub">Two are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>, the rest are Pionaarr mods.</p>
<div class="legend">
<span class="state stable">stable</span>
<span class="state experimental">experimental</span>
<span class="player">ran on a player</span>
</div>
<div class="grid">
@@ -78,195 +75,104 @@
<!-- advanced_waveforms -->
<article class="card">
<div class="card-head">
<div class="icon" aria-hidden="true">🌈</div>
<div>
<h3>Advanced waveforms <code>advanced_waveforms</code></h3>
<div class="by">ours · based on arnoldasr's rgb_waveform, updated and published by us</div>
<h3>Advanced waveforms</h3>
<div class="meta"><span class="state stable">stable</span></div>
</div>
<div class="meta"><span class="player">ran on a player</span><span class="state stable">stable</span></div>
</div>
<p>The big waveform in rekordbox's RGB colours, the overview as a red-to-white gradient. Based on arnoldasr's <code>rgb_waveform</code>, now maintained by us (1.0.1 fixes tracks that showed only gradient colours).</p>
<div class="vs">
<figure><img src="assets/detail-stock.png" alt="Stock blue detail waveform"><figcaption>Stock</figcaption></figure>
<figure class="mod"><img src="assets/detail-mods.png" alt="RGB detail waveform"><figcaption>RGB</figcaption></figure>
</div>
<div class="vs stack">
<figure><img src="assets/overview-stock.png" alt="Stock blue overview waveform"><figcaption>Overview · stock</figcaption></figure>
<figure class="mod"><img src="assets/overview-mods.png" alt="Gradient overview waveform"><figcaption>Overview · gradient (with cue colours and hot cues)</figcaption></figure>
</div>
<ul class="diff">
<li><span class="k">Stock</span><span>Blue waveform, flat blue overview.</span></li>
<li><span class="k new">Modded</span><span>RGB waveform, red-to-white overview.</span></li>
</ul>
</article>
<!-- extended_bpm -->
<article class="card">
<div class="card-head">
<div class="icon" aria-hidden="true">🔢</div>
<div>
<h3>Extended BPM <code>extended_bpm</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>
</div>
<p>The BPM to two decimals: tenths small above, hundredths below.</p>
<div class="vs">
<figure><img src="assets/bpm-stock.png" alt="Stock BPM 145.0"><figcaption>Stock</figcaption></figure>
<figure class="mod"><img src="assets/bpm-mods.png" alt="BPM with two decimals"><figcaption>Two decimals</figcaption></figure>
</div>
<ul class="diff">
<li><span class="k">Stock</span><span>BPM to one decimal.</span></li>
<li><span class="k new">Modded</span><span>BPM to two decimals, stacked.</span></li>
</ul>
</article>
<!-- phasemeter -->
<article class="card">
<div class="card-head">
<div class="icon" aria-hidden="true">🎚️</div>
<div>
<h3>Phase meter <code>phasemeter</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>
</div>
<p>Two lines instead of four boxes: orange for the master, blue for this deck, a marker sweeping along the bar. UTILITY › PHASE METER switches it.</p>
<div class="vs">
<figure><img src="assets/phase-stock.png" alt="Stock phase meter: four boxes"><figcaption>Stock</figcaption></figure>
<figure class="mod"><img src="assets/phase-mods.png" alt="Two-line phase meter"><figcaption>Two lines</figcaption></figure>
</div>
<div class="vs stack">
<figure class="mod"><img src="assets/utility-phase.png" alt="UTILITY menu with PHASE METER item"><figcaption>UTILITY › PHASE METER</figcaption></figure>
</div>
<ul class="diff">
<li><span class="k">Stock</span><span>Four boxes; UTILITY › SLIP FLASHING.</span></li>
<li><span class="k new">Modded</span><span>Two lines with markers; UTILITY › PHASE METER picks the meter.</span></li>
</ul>
<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-3band.png" alt="3-band waveform: blue lows, amber mids, white highs" loading="lazy"><figcaption>3-band · in testing, not in the builder yet</figcaption></figure>
<p>rekordbox's RGB colours on the big waveform, a red-to-white overview. 3-band (lows, mids, highs as in rekordbox) comes next, switched in UTILITY › WAVEFORM.</p>
</article>
<!-- cuecolours -->
<article class="card">
<div class="card-head">
<div class="icon" aria-hidden="true">🎯</div>
<div>
<h3>Cue colours &amp; hot cues shown <code>cuecolours</code></h3>
<div class="by">ours · made with Claude Code</div>
<h3>Cue colours</h3>
<div class="meta"><span class="state stable">stable</span></div>
</div>
<div class="meta"><span class="player">ran on a player</span><span class="state stable">stable</span></div>
</div>
<p>Memory cues in their rekordbox colours, and the hot cues on the stick (A–H) as lettered boxes on both waveforms.</p>
<div class="vs">
<figure><img src="assets/detail-stock.png" alt="Stock: red memory triangles only"><figcaption>Stock</figcaption></figure>
<figure class="mod"><img src="assets/hotcue-detail.png" alt="Hot cue A box on the detail waveform"><figcaption>Hot cue A on the waveform</figcaption></figure>
</div>
<ul class="diff">
<li><span class="k">Stock</span><span>Every memory cue a red triangle; hot cues not shown.</span></li>
<li><span class="k new">Modded</span><span>Memory cues in rekordbox colours; hot cues as coloured A–H boxes.</span></li>
</ul>
<a class="more" href="docs.html#cuecolours">Read more →</a>
<div class="by">Pionaarr mod · <code>cuecolours</code></div>
<figure class="tshot"><img src="assets/card-cues.png" alt="Overview with coloured memory cues and hot cue boxes A to F" loading="lazy"></figure>
<p>Memory cues in their rekordbox colours, hot cues A–H as lettered boxes.</p>
<a class="more" href="docs.html#cuecolours">More →</a>
</article>
<!-- hotcuekeys -->
<article class="card">
<div class="card-head">
<div class="icon" aria-hidden="true">⚡</div>
<div>
<h3>Hot cue keys <code>hotcuekeys</code></h3>
<div class="by">ours · made with Claude Code · needs <code>cuecolours</code></div>
<h3>Hot cue keys</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<div class="meta"><span class="player">ran on a player</span><span class="state experimental">experimental</span></div>
</div>
<p>QUANTIZE pressed short switches the hot key mode: the top three BEAT DIVIDE keys play hot cues A–C, instantly. Hold for a gate, hold on an empty key to set one, DELETE + key to delete. Saved on the stick in colour.</p>
<div class="vs">
<figure><img src="assets/display-stock.png" alt="Stock: QUANTIZE label only"><figcaption>Stock</figcaption></figure>
<figure class="mod"><img src="assets/display-mods.png" alt="HOT KEYS box beside QUANTIZE"><figcaption>HOT KEYS mode on</figcaption></figure>
</div>
<div class="vs stack">
<figure class="mod"><img src="assets/utility-hotcue.png" alt="UTILITY menu with the HOT CUE KEYS item"><figcaption>UTILITY › HOT CUE KEYS</figcaption></figure>
</div>
<ul class="diff">
<li><span class="k">Stock</span><span>No hot cues on the 900NXS; BEAT DIVIDE keys only for loops.</span></li>
<li><span class="k new">Modded</span><span>Hot cue mode: play, gate, set, delete on the BEAT DIVIDE keys; QUANTIZE still works when held.</span></li>
</ul>
<div class="by">Pionaarr mod · <code>hotcuekeys</code></div>
<figure class="tshot"><img src="assets/card-hotkeys.png" alt="HOT KEYS shown next to QUANTIZE" loading="lazy"></figure>
<p>QUANTIZE short: the top three BEAT DIVIDE keys become hot cues A–C. Hold an empty key to set one.</p>
<a class="more" href="docs.html#hotcuekeys">Hot cue guide →</a>
</article>
<!-- beatjump -->
<article class="card">
<div class="card-head">
<div class="icon" aria-hidden="true">⏭️</div>
<div>
<h3>Beat jump <code>beatjump</code></h3>
<div class="by">ours · made with Claude Code · needs <code>hotcuekeys</code></div>
<h3>Beat jump</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<div class="meta"><span class="player">ran on a player</span><span class="state experimental">experimental</span></div>
</div>
<p>TRACK SEARCH ◀◀ ▶▶ jumps 1, 2, 4 or 8 beats on the beat grid, gapless and in phase. Set in UTILITY › BEAT JUMP.</p>
<ul class="diff">
<li><span class="k">Stock</span><span>TRACK SEARCH goes to the previous / next track.</span></li>
<li><span class="k new">Modded</span><span>Whole bars (4, 8) or beats (1, 2) forward and back, the phase meter stays where it was.</span></li>
</ul>
<a class="more" href="docs.html#beatjump">Read more →</a>
</article>
<!-- ledsaver -->
<article class="card">
<div class="card-head">
<div class="icon" aria-hidden="true">✨</div>
<div>
<h3>LED animation <code>ledsaver</code></h3>
<div class="by">ours · made with Claude Code</div>
</div>
<div class="meta"><span class="player">ran on a player</span><span class="state stable">stable</span></div>
</div>
<p>While the screen saver dims the display, the button LEDs and the jog rings play a loop. Any key stops it.</p>
<ul class="diff">
<li><span class="k">Stock</span><span>The screen saver only dims the display.</span></li>
<li><span class="k new">Modded</span><span>Button LEDs and jog rings animate while it is dimmed.</span></li>
</ul>
<a class="more" href="docs.html#ledsaver">Read more →</a>
<div class="by">Pionaarr mod · <code>beatjump</code></div>
<p>TRACK SEARCH ◀◀ ▶▶ jumps 1, 2, 4 or 8 beats, gapless and in phase.</p>
<a class="more" href="docs.html#beatjump">More →</a>
</article>
<!-- keynotation -->
<article class="card">
<div class="card-head">
<div class="icon" aria-hidden="true">🎼</div>
<div>
<h3>Key notation <code>keynotation</code></h3>
<div class="by">ours · made with Claude Code</div>
</div>
<h3>Key notation</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<p>Every key in one notation, whatever rekordbox exported: Camelot, Open Key or classic, in its Camelot wheel colour. Also in INFO and BROWSE › KEY.</p>
<div class="vs stack">
<figure><img src="assets/key-stock.png" alt="Key as exported: 4A"><figcaption>As exported (Camelot): 4A</figcaption></figure>
<figure class="mod"><img src="assets/key-mods.png" alt="Key in Open Key: 9m"><figcaption>KEY NOTATION › OPEN KEY: 9m</figcaption></figure>
<figure class="mod"><img src="assets/key-colour.png" alt="Key 5A in its Camelot wheel colour, orange"><figcaption>Wheel colour: 5A in orange</figcaption></figure>
<figure class="mod"><img src="assets/utility-key.png" alt="UTILITY menu with the KEY NOTATION item"><figcaption>UTILITY › KEY NOTATION</figcaption></figure>
<div class="by">Pionaarr mod · <code>keynotation</code></div>
<figure class="tshot"><img src="assets/card-key.png" alt="Title bar with the key 4A in its wheel colour" loading="lazy"></figure>
<p>Every key in Camelot, Open Key or classic, in its Camelot wheel colour.</p>
<a class="more" href="docs.html#keynotation">More →</a>
</article>
<!-- extended_bpm -->
<article class="card">
<div class="card-head">
<h3>Extended BPM</h3>
<div class="meta"><span class="state stable">stable</span></div>
</div>
<ul class="diff">
<li><span class="k">Stock</span><span>The key as rekordbox's export setting wrote it.</span></li>
<li><span class="k new">Modded</span><span>OFF, CAMELOT (default), OPEN KEY or CLASSIC — the same notation on every stick, in its wheel colour.</span></li>
</ul>
<a class="more" href="docs.html#keynotation">Read more →</a>
<div class="by">by arnoldasr · <code>extended_bpm</code></div>
<figure class="tshot"><img src="assets/card-bpm.png" alt="BPM 145 with two decimals" loading="lazy"></figure>
<p>The BPM to two decimals.</p>
</article>
<!-- phasemeter -->
<article class="card">
<div class="card-head">
<h3>Phase meter</h3>
<div class="meta"><span class="state stable">stable</span></div>
</div>
<div class="by">by arnoldasr · <code>phasemeter</code></div>
<figure class="tshot"><img src="assets/card-phase.png" alt="Two-line phase meter" loading="lazy"></figure>
<p>Two lines instead of four boxes: master and this deck.</p>
</article>
<!-- ledsaver -->
<article class="card">
<div class="card-head">
<h3>LED animation</h3>
<div class="meta"><span class="state stable">stable</span></div>
</div>
<div class="by">Pionaarr mod · <code>ledsaver</code></div>
<p>With the screen saver on, the button LEDs and jog rings play a loop.</p>
<a class="more" href="docs.html#ledsaver">More →</a>
</article>
<!-- credit -->
<article class="card">
<div class="card-head">
<div class="icon" aria-hidden="true">☠️</div>
<div>
<h3>Boot text <code>credit</code></h3>
<div class="by">ours · made with Claude Code</div>
</div>
<div class="meta"><span class="player">ran on a player</span><span class="state stable">stable</span></div>
</div>
<p>The boot screen says <em>Pionaarr Mods 1.0</em> instead of <em>Ver 1.31</em>.</p>
<div class="vs">
<figure><img src="assets/boot-stock.png" alt="Stock boot screen: Ver 1.31"><figcaption>Stock</figcaption></figure>
<figure class="mod"><img src="assets/boot-mods.png" alt="Boot screen: Pionaarr Mods 1.0"><figcaption>Pionaarr Mods 1.0</figcaption></figure>
<h3>Boot text</h3>
<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.0" loading="lazy"></figure>
<p>The boot screen says <em>Pionaarr Mods 1.0</em>.</p>
</article>
</div>
@@ -279,16 +185,7 @@
<h2 class="section-title">Build it in your browser</h2>
<p class="section-sub">The <a href="builder.html">builder</a> takes the official 1.31 update and adds the mods you tick, on your computer. Only the main application changes; the boot loader and recovery are copied byte for byte and checked.</p>
<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></div>
<p class="section-sub" style="margin-top:28px">Prefer the command line? The Python patcher builds the same file, byte for byte:</p>
<div class="term"><span class="c"># pick the mods in a list</span>
<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 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>
<p class="caption">Both ask you to accept a disclaimer first. <a href="docs.html#install">Full install guide →</a></p>
<p class="caption">Prefer the command line? The Python patcher is in the <a href="docs.html#install">docs</a>.</p>
</div>
</section>
</main>
@@ -297,11 +194,12 @@
<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>extended_bpm</code> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>; <code>advanced_waveforms</code> is based on his <code>rgb_waveform</code> and is now updated and published by us.</p>
<p>This website, the builder, the mods <code>advanced_waveforms</code>, <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>extended_bpm</code> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
</div>
<div>
<h4>Disclaimer</h4>
<p>Unofficial. Not affiliated with or endorsed by Pioneer DJ or AlphaTheta; CDJ and rekordbox are their trademarks. Flashing modified firmware can leave your player unusable. Everything here is provided as is, without warranty, and used at your own risk.</p>
<p class="legal"><a href="impressum.html">Impressum</a> · <a href="datenschutz.html">Datenschutz</a></p>
</div>
</div>
</footer>
+1 -1
View File
@@ -134,7 +134,7 @@
x.beginPath(); x.arc(0, 0, r, 0, Math.PI * 2); x.arc(0, 0, r * 0.33, 0, Math.PI * 2, true);
x.fillStyle = sheen; x.fill();
x.beginPath(); x.arc(0, 0, r * 0.3, 0, Math.PI * 2);
x.fillStyle = 'rgba(255,90,31,' + 0.10 * a + ')'; x.fill();
x.fillStyle = 'rgba(0,97,197,' + 0.06 * a + ')'; x.fill();
x.beginPath(); x.arc(r * 0.18, 0, r * 0.012, 0, Math.PI * 2);
x.fillStyle = 'rgba(255,255,255,' + 0.25 * a + ')'; x.fill();
x.restore();
+62 -21
View File
@@ -1,3 +1,13 @@
/* fonts from this server (SIL Open Font License, assets/fonts/OFL-*.txt): no request to a font service */
@font-face { font-family: "Barlow"; font-style: normal; font-weight: 400; font-display: swap; src: url("assets/fonts/barlow-400.woff2") format("woff2"); }
@font-face { font-family: "Barlow"; font-style: normal; font-weight: 500; font-display: swap; src: url("assets/fonts/barlow-500.woff2") format("woff2"); }
@font-face { font-family: "Barlow"; font-style: normal; font-weight: 600; font-display: swap; src: url("assets/fonts/barlow-600.woff2") format("woff2"); }
@font-face { font-family: "Barlow"; font-style: normal; font-weight: 700; font-display: swap; src: url("assets/fonts/barlow-700.woff2") format("woff2"); }
@font-face { font-family: "Chakra Petch"; font-style: normal; font-weight: 600; font-display: swap; src: url("assets/fonts/chakra-petch-600.woff2") format("woff2"); }
@font-face { font-family: "Chakra Petch"; font-style: normal; font-weight: 700; font-display: swap; src: url("assets/fonts/chakra-petch-700.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 500; font-display: swap; src: url("assets/fonts/jetbrains-mono-500.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 700; font-display: swap; src: url("assets/fonts/jetbrains-mono-700.woff2") format("woff2"); }
/* CDJ-900NXS Mods — shared styles */
:root {
--bg: #0b0d12;
@@ -8,7 +18,7 @@
--text: #e8ebf2;
--muted: #98a1b6;
--faint: #6b7489;
--accent: #ff5a1f; /* the deck's orange */
--accent: #1a78e6; /* the player's blue (its title bar) */
--accent-2: #2fd3ff; /* the deck's cyan */
--ok: #3ddc84;
--warn: #ffb020;
@@ -65,11 +75,6 @@ kbd {
.top .wrap { display: flex; align-items: center; gap: 16px; height: 64px; }
.brand { display: flex; align-items: center; gap: 10px; color: var(--text); font-weight: 800; letter-spacing: -.01em; }
.brand:hover { text-decoration: none; }
.brand .disc {
width: 30px; height: 30px; border-radius: 50%;
background: conic-gradient(from 0deg, var(--accent), #ffb020, var(--accent-2), #7a5cff, var(--accent));
box-shadow: inset 0 0 0 7px var(--bg), inset 0 0 0 9px var(--line);
}
.tabs { display: flex; gap: 4px; margin-left: auto; background: var(--card); border: 1px solid var(--line); border-radius: 999px; padding: 4px; }
.tabs a {
color: var(--muted); padding: 6px 16px; border-radius: 999px; font-weight: 600; font-size: .95rem;
@@ -248,14 +253,22 @@ td:first-child { color: var(--text); white-space: nowrap; }
.leds { display: flex; gap: 18px; flex-wrap: wrap; margin: 14px 0; }
.led { display: flex; align-items: center; gap: 10px; color: var(--muted); font-size: .92rem; }
.led i { width: 26px; height: 12px; border-radius: 4px; background: #2a2f3a; border: 1px solid #3a4150; display: inline-block; }
/* a BEAT DIVIDE key: round, its label on it, the LED lighting the key */
.led i {
width: 24px; height: 24px; border-radius: 50%; flex: none; display: inline-grid; place-items: center;
background: #2a2f3a; border: 1px solid #3a4150; color: #8a93a6;
font: 700 .5rem/1 var(--mono); font-style: normal; letter-spacing: -.02em;
}
.led i.dim, .led i.blink, .led i.slow { color: #ffe2c8; border-color: #8a4a16; }
.led i.dim { background: #6b3a12; box-shadow: 0 0 6px rgba(255, 120, 30, .25); }
.led i.bright { background: #ff8a2a; box-shadow: 0 0 14px rgba(255, 138, 42, .8); }
.led i.blink { animation: blink 1.2s steps(1) infinite; }
.led i.slow { animation: blink-slow 1.6s steps(1) infinite; }
@keyframes blink-slow { 0%, 50% { background: #ff8a2a; box-shadow: 0 0 8px rgba(255,138,42,.7); } 51%, 100% { background: #6b3a12; box-shadow: none; } }
@keyframes blink {
0%, 16% { background: #ff8a2a; box-shadow: 0 0 14px rgba(255,138,42,.8); }
0%, 16% { background: #ff8a2a; box-shadow: 0 0 8px rgba(255,138,42,.7); }
17%, 33% { background: #6b3a12; box-shadow: none; }
34%, 50% { background: #ff8a2a; box-shadow: 0 0 14px rgba(255,138,42,.8); }
34%, 50% { background: #ff8a2a; box-shadow: 0 0 8px rgba(255,138,42,.7); }
51%, 100% { background: #6b3a12; box-shadow: none; }
}
@@ -277,7 +290,7 @@ footer .ai .dot { width: 8px; height: 8px; border-radius: 50%; background: var(-
}
@media (max-width: 560px) {
.top .wrap { gap: 10px; }
.brand span:not(.disc) { display: none; }
.brand span:not(.cue-key) { display: none; }
.tabs a { padding: 6px 12px; }
.hero { padding: 44px 0 24px; }
.vs { grid-template-columns: 1fr; }
@@ -417,21 +430,25 @@ button.btn { font: inherit; font-weight: 700; cursor: pointer; }
:root {
--display: "Chakra Petch", "Barlow", system-ui, sans-serif;
--sans: "Barlow", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--lcd: #ff7a2a;
--lcd: #5cb8ff;
--lcd-green: #8dffb4;
--beat: 0;
}
:root[data-theme="light"] { --lcd: #d9520c; --lcd-green: #0a8f45; }
:root[data-theme="light"] { --lcd: #0061c5; --lcd-green: #0a8f45; --accent: #0061c5; }
html { background: var(--bg); }
body { background: transparent; font-size: 17px; }
.bg-fx { position: fixed; inset: 0; width: 100%; height: 100%; z-index: -1; pointer-events: none; }
h1, h2, h3, .brand, .tile .n { font-family: var(--display); }
.hero::before { display: none; }
.brand .disc { animation: spin 1.8s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
.brand .disc { background: repeating-radial-gradient(circle, #1a1d26 0 2px, #2a2f3c 2px 3px); box-shadow: inset 0 0 0 9px #11141b, 0 0 0 2px var(--accent); position: relative; }
.brand .disc::after { content: ""; position: absolute; inset: 11px; border-radius: 50%; background: var(--accent); }
/* the logo: the player's CUE key, its orange ring lit (at the cue point,
while PLAY blinks) */
.brand .cue-key {
width: 34px; height: 34px; border-radius: 50%; flex: none; display: grid; place-items: center;
width: 30px; height: 30px; background: #16181d;
box-shadow: 0 0 0 2px var(--bg), 0 0 0 4px #ff8a1f, 0 0 8px 3px rgba(255,138,31,.35);
color: #eef0f4; font: 700 .6rem/1 var(--display); letter-spacing: .06em;
}
.tabs { background: none; border: 0; gap: 2px; padding: 0; }
.tabs a {
@@ -451,7 +468,7 @@ h1, h2, h3, .brand, .tile .n { font-family: var(--display); }
background: color-mix(in srgb, #000 55%, transparent);
text-shadow: 0 0 calc(6px + 6px * var(--beat)) color-mix(in srgb, var(--lcd) 70%, transparent);
}
:root[data-theme="light"] .lcd { background: #fff8f2; }
:root[data-theme="light"] .lcd { background: #f2f7ff; }
.lcd i { width: 7px; height: 7px; border-radius: 50%; background: var(--lcd); opacity: calc(.35 + .65 * var(--beat)); }
.hero { padding: 64px 0 36px; }
@@ -459,7 +476,8 @@ h1, h2, h3, .brand, .tile .n { font-family: var(--display); }
font-size: clamp(2.8rem, 8vw, 5.6rem); line-height: .95; letter-spacing: .01em;
text-transform: uppercase; margin: 22px 0 18px; font-weight: 700;
}
.hero h1 .r { color: var(--accent); }
.hero h1 .r { color: #2f8cf5; }
:root[data-theme="light"] .hero h1 .r { color: #0061c5; }
.hero p.lead { font-size: 1.18rem; color: var(--muted); max-width: 680px; margin: 0 0 12px; }
.hero p.lead + p.lead { margin-bottom: 26px; }
.btn { border-radius: 8px; font-family: var(--display); letter-spacing: .03em; text-transform: uppercase; font-size: .92rem; }
@@ -497,8 +515,7 @@ h2.section-title { text-transform: uppercase; letter-spacing: .02em; }
.btn.play { padding: 7px 20px 7px 7px; gap: 12px; }
.play-key {
width: 34px; height: 34px; border-radius: 50%; flex: none; display: grid; place-items: center;
background: radial-gradient(circle at 50% 35%, #2a2d33, #121418 70%);
box-shadow: inset 0 1px 0 rgba(255,255,255,.12), 0 1px 2px rgba(0,0,0,.5);
background: #16181d;
position: relative;
}
.play-key::before {
@@ -512,6 +529,30 @@ h2.section-title { text-transform: uppercase; letter-spacing: .02em; }
:root[data-theme="light"] .play-key::before { border-color: #8dffb4; box-shadow: 0 0 8px #8dffb4; }
@media (prefers-reduced-motion: reduce) {
.brand .disc { animation: none; }
.play-key::before { animation: none; }
}
/* ---- short mod tiles: one shot each, from the emulator ---- */
.grid { grid-template-columns: repeat(auto-fill, minmax(min(100%, 360px), 1fr)); gap: 16px; }
.card { gap: 10px; padding: 18px; }
.card-head { align-items: center; justify-content: space-between; }
.card h3 { font-size: 1.15rem; text-transform: uppercase; }
.card .by { margin-top: -6px; }
.card .by code { font-size: .78rem; color: var(--faint); background: none; padding: 0; }
.card p { font-size: .98rem; }
.card .meta { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.tshot { margin: 0; background: #000; border: 1px solid var(--line); border-radius: 6px; overflow: hidden; }
.tshot img { display: block; width: 100%; height: 96px; object-fit: contain; image-rendering: pixelated; }
.tshot figcaption {
font: 700 .66rem/1 var(--mono); letter-spacing: .1em; text-transform: uppercase;
padding: 7px 9px; color: #c9cfdb; background: #0d1017; border-top: 1px solid #1f2533;
}
.state.testing { color: var(--accent-2); }
/* ---- Impressum, Datenschutz ---- */
.legal-page { max-width: 760px; padding-top: 48px; padding-bottom: 64px; }
.legal-page h1 { font-size: clamp(2rem, 5vw, 2.8rem); text-transform: uppercase; margin: 0 0 12px; }
.legal-page h2 { font-size: 1.15rem; margin: 30px 0 8px; text-transform: uppercase; letter-spacing: .02em; }
.legal-page p, .legal-page li { color: var(--muted); }
.legal-page ul { padding-left: 1.3em; }
footer .legal { margin-top: 14px; font-size: .85rem; }
+13
View File
@@ -1,6 +1,19 @@
{
"_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.4.2",
"date": "2026-10-20",
"changes": [
"Advanced waveforms is listed as a Pionaarr mod everywhere; our mods are called Pionaarr mods instead of \"ours\".",
"The logo and the favicon are the player's CUE key with its orange ring lit.",
"Shorter mod tiles, one emulator shot each; the 3-band waveform shown with advanced waveforms (still in testing).",
"The player's blue instead of the orange; no command line on the main page (it is in the docs).",
"Docs: the hot cue LEDs drawn as round BEAT DIVIDE keys with their labels.",
"Impressum and privacy policy (German, for Austria and Germany).",
"Fonts come from this server: no more requests to Google Fonts."
]
},
{
"version": "1.4.1",
"date": "2026-10-20",
+12 -13
View File
@@ -5,18 +5,16 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<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="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;600;700&family=Chakra+Petch:wght@600;700&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css?v=1.4.1">
<script src="assets/versions.js?v=1.4.1"></script>
<script src="script.js?v=1.4.1"></script>
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.4.2">
<script src="assets/versions.js?v=1.4.2"></script>
<script src="script.js?v=1.4.2"></script>
</head>
<body>
<header class="top">
<div class="wrap">
<a class="brand" href="index.html"><span class="disc" aria-hidden="true"></span><span>Pionaarr Mods</span></a>
<a class="brand" href="index.html"><span class="cue-key" aria-hidden="true">CUE</span><span>Pionaarr Mods</span></a>
<nav class="tabs" aria-label="Sections">
<a href="index.html">Mods</a>
<a href="builder.html">Builder</a>
@@ -43,7 +41,7 @@
<div class="icon" aria-hidden="true">🔎</div>
<div>
<h3>Quick search <code>quicksearch</code></h3>
<div class="by">ours · made with Claude Code</div>
<div class="by">Pionaarr mod · made with Claude Code</div>
</div>
<div class="meta"><span class="player no">emulator only</span><span class="state planned">in testing</span></div>
</div>
@@ -59,7 +57,7 @@
<div class="icon" aria-hidden="true">💾</div>
<div>
<h3>USB auto load <code>usbautoload</code></h3>
<div class="by">ours · made with Claude Code</div>
<div class="by">Pionaarr mod · made with Claude Code</div>
</div>
<div class="meta"><span class="player no">emulator only</span><span class="state planned">in testing</span></div>
</div>
@@ -75,7 +73,7 @@
<div class="icon" aria-hidden="true">↔️</div>
<div>
<h3>Phase meter reverse <code>phasereverse</code></h3>
<div class="by">ours · made with Claude Code · needs <code>phasemeter</code></div>
<div class="by">Pionaarr mod · made with Claude Code · needs <code>phasemeter</code></div>
</div>
<div class="meta"><span class="player no">emulator only</span><span class="state planned">in testing</span></div>
</div>
@@ -91,7 +89,7 @@
<div class="icon" aria-hidden="true">🎤</div>
<div>
<h3>Stems</h3>
<div class="by">ours · idea</div>
<div class="by">Pionaarr mod · idea</div>
</div>
<div class="meta"><span class="state feasibility">feasibility</span></div>
</div>
@@ -107,7 +105,7 @@
<div class="icon" aria-hidden="true">🌊</div>
<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 class="by">Pionaarr mod · made with Claude Code · extends advanced waveforms</div>
</div>
<div class="meta"><span class="player no">emulator only</span><span class="state planned">in testing</span></div>
</div>
@@ -128,11 +126,12 @@
<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> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>; <code>advanced_waveforms</code> is based on his <code>rgb_waveform</code> and is now updated and published by us.</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> and <code>phasemeter</code> are by <a href="https://github.com/arnoldasr/cdj900nxs">arnoldasr</a>.</p>
</div>
<div>
<h4>Disclaimer</h4>
<p>Unofficial. Not affiliated with or endorsed by Pioneer DJ or AlphaTheta; CDJ and rekordbox are their trademarks. Flashing modified firmware can leave your player unusable. Everything here is provided as is, without warranty, and used at your own risk.</p>
<p class="legal"><a href="impressum.html">Impressum</a> · <a href="datenschutz.html">Datenschutz</a></p>
</div>
</div>
</footer>