Files
CDJ900ModsWeb/index.html
T

282 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<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="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css?v=1.9.3">
<script src="assets/versions.js?v=1.9.3"></script>
<script src="script.js?v=1.9.3"></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" aria-current="page">Mods</a>
<a href="builder.html">Builder</a>
<a href="upcoming.html">Upcoming</a>
<a href="docs.html">Docs</a>
<a href="issues.html">Known issues</a>
</nav>
<button class="theme-btn" type="button" aria-label="Switch light / dark">☀</button>
</div>
</header>
<main>
<div class="hero">
<div class="wrap">
<span class="lcd"><i></i>CDJ-900NXS · firmware 1.31</span>
<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 <a href="https://github.com/Stijn-Jacobs/cdj-nxs2-qemu">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>
<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" href="#mods">The mods</a>
<a class="btn" href="docs.html">Docs</a>
</div>
<div class="compare" style="--pos:50%">
<img src="assets/stock-full.png" alt="Stock CDJ-900NXS screen: blue waveform, red memory cues">
<img class="after" src="assets/mods-full.png" alt="Modded screen: wide 3-band waveform, coloured cues and hot cues, HOT KEYS, key in colour, BPM to two decimals">
<span class="tag l">Stock 1.31</span>
<span class="tag r">Pionaarr Mods</span>
<span class="handle" aria-hidden="true"></span>
<input type="range" min="0" max="100" value="50" aria-label="Drag to compare stock and modded screen">
</div>
<div class="caption">Same track, same spot, in the emulator. Right: every mod: the 3-band waveform to the right edge, the next cue's name, hot cues, the key in colour, the countdown clear of the phase meter.</div>
</div>
</div>
<section>
<div class="wrap">
<div class="strip">
<div class="tile"><div class="n">14</div><div class="t">mods in the builder, any combination</div></div>
<div class="tile"><div class="n">A–C</div><div class="t">hot cues on the BEAT DIVIDE keys</div></div>
<div class="tile"><div class="n">0 bytes</div><div class="t">changed in the boot loader</div></div>
<div class="tile"><div class="n">1 file</div><div class="t">built in your browser, nothing uploaded</div></div>
</div>
</div>
</section>
<section id="mods">
<div class="wrap">
<h2 class="section-title">The mods</h2>
<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>
</div>
<div class="grid">
<!-- advanced_waveforms -->
<article class="card">
<div class="card-head">
<h3>Advanced waveforms</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</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-3band.png" alt="3-band waveform: blue lows, amber mids, white highs" loading="lazy"><figcaption>3-band</figcaption></figure>
<p>rekordbox's RGB colours on the big waveform, a red-to-white overview. 1.0.1 takes colour data that is a little short too. UTILITY › WAVEFORM switches BLUE, RGB and 3-band (lows, mids, highs).</p>
<a class="more" href="docs.html#advanced_waveforms">More →</a>
</article>
<!-- cuecolours -->
<article class="card">
<div class="card-head">
<h3>Cue colours</h3>
<div class="meta"><span class="state stable">stable</span></div>
</div>
<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. 1.0.1 keeps a hot cue's colour when it has a comment.</p>
<a class="more" href="docs.html#cuecolours">More →</a>
</article>
<!-- hotcuekeys -->
<article class="card">
<div class="card-head">
<h3>Hot cue keys</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<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">
<h3>Beat jump</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<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">
<h3>Key notation</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<div class="by">Pionaarr mod · <code>keynotation</code></div>
<figure class="tshot"><img src="assets/card-key.png" alt="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>
<!-- cuenames -->
<article class="card">
<div class="card-head">
<h3>Cue names</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<div class="by">Pionaarr mod · <code>cuenames</code></div>
<figure class="tshot"><img src="assets/card-cuenames.png" alt="Title bar with the next cue: C Break in green" loading="lazy"></figure>
<p>The comment you give a cue in rekordbox ("Drop") in the title bar, in the cue's colour: always the next named cue ahead.</p>
<a class="more" href="docs.html#cuenames">More →</a>
</article>
<!-- played -->
<article class="card">
<div class="card-head">
<h3>Played tracks</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<div class="by">Pionaarr mod · <code>played</code></div>
<figure class="tshot"><img src="assets/played.png" alt="Track list: [1] Lunatica in green, loaded on player 1" loading="lazy"></figure>
<p>Tracks loaded tonight turn green in BROWSE. Over Pro DJ Link modded players share theirs, and a track on another deck right now shows [1] or [1][3].</p>
<a class="more" href="docs.html#played">More →</a>
</article>
<!-- endwarn -->
<article class="card">
<div class="card-head">
<h3>End warning</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<div class="by">Pionaarr mod · <code>endwarn</code></div>
<figure class="tshot"><img src="assets/endwarn.png" alt="Overview with the bar under it in red" loading="lazy"></figure>
<p>In the last 30 seconds the bar under the overview blinks red instead of white.</p>
<a class="more" href="docs.html#endwarn">More →</a>
</article>
<!-- wide_waveform -->
<article class="card">
<div class="card-head">
<h3>Wide waveform</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<div class="by">Pionaarr mod · <code>wide_waveform</code></div>
<figure class="tshot"><img src="assets/widewave.png" alt="The big waveform to the right edge, a ZOOM box above it" loading="lazy"></figure>
<p>The big waveform to the right edge instead of the ZOOM/GRID wheel; a small box over the BPM says ZOOM or GRID.</p>
<a class="more" href="docs.html#wide_waveform">More →</a>
</article>
<!-- quicksearch -->
<article class="card">
<div class="card-head">
<h3>Quick search</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<div class="by">Pionaarr mod · <code>quicksearch</code></div>
<p>BROWSE held opens SEARCH; BROWSE twice goes to the list the playing track came from, straight there.</p>
<a class="more" href="docs.html#quicksearch">More →</a>
</article>
<!-- usbautoload -->
<article class="card">
<div class="card-head">
<h3>USB auto load</h3>
<div class="meta"><span class="state experimental">experimental</span></div>
</div>
<div class="by">Pionaarr mod · <code>usbautoload</code></div>
<p>MY SETTINGS on a stick are loaded the moment the player finds them. UTILITY › USB AUTO LOAD.</p>
<a class="more" href="docs.html#usbautoload">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>
<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 experimental">experimental</span></div>
</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>
<p>Two lines instead of four boxes: master and this deck. UTILITY › PHASE METER: OFF, ON or REVERSE; the bar countdown sits clear of the lines.</p>
<a class="more" href="docs.html#phasemeter">More →</a>
</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">
<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.9.3" loading="lazy"></figure>
<p>The boot screen says <em>Pionaarr Mods 1.9.3</em>.</p>
</article>
</div>
<p class="caption">Still to come: <a href="upcoming.html">Upcoming</a>.</p>
</div>
</section>
<section id="build">
<div class="wrap">
<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="caption">Prefer the command line? The Python patcher is in the <a href="docs.html#install">docs</a>.</p>
</div>
</section>
</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, 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>
</body>
</html>