DarkOneJSP3 v0.9.8 - Red Bull Edition ⚡
DarkOneJSP3 v0.9.8 — Performance, Stability and Documentation Update
DarkOneJSP3 v0.9.8 is a substantial maintenance and optimisation update over v0.8.2.
This release improves JS Playlist and Playlist Manager performance, modernises several rendering paths, resolves smooth-scrolling and Display regressions discovered during testing, and significantly expands the project documentation.
A refreshed DarkOneJSP3.fcl is included and should be re-imported when upgrading from an earlier release.
Performance improvements
Demand-driven scrolling and repainting
JS Playlist and Smooth Playlist Manager no longer rely on permanent high-frequency repaint loops while idle.
Timers now:
- start only when scrolling or animation is required;
- stop automatically when movement is complete;
- coalesce duplicate repaint requests;
- preserve pending updates while a panel is hidden; and
- resume correctly when the panel becomes visible.
This reduces unnecessary timer activity and idle CPU usage while retaining smooth movement on high-refresh-rate displays.
JS Playlist render cache
JS Playlist now includes a bounded render cache for frequently evaluated row information, including:
- primary column output;
- optional secondary-line output;
- rating and loved-state data;
- playback-dependent values;
- queue-related information; and
- streaming and dynamic metadata.
The cache is invalidated selectively when playlists, metadata, playback state, queue contents or formatting settings change.
This substantially reduces repeated title-format evaluation while scrolling through large playlists.
Direct2D bitmap caching
Frequently rendered artwork and sprite resources are now converted to reusable Direct2D bitmap objects where appropriate.
Optimised resources include:
- playlist album covers;
- fallback artwork;
- playlist logos;
- control-panel button sheets;
- Display matrix sprites;
- Display status icons;
- tinted accent sprites; and
- rendered Dot Matrix values.
Mutable off-screen images continue using the correct JScript Panel image type where required.
Additional rendering improvements
- JS Playlist column geometry is cached until the layout changes.
- Playlist Manager caches autoplaylist and locked-playlist state.
- Display label measurements and static render data are reused.
- Safe row-local repainting is used where a full panel repaint is unnecessary.
- Optional internal paint profiling is available for diagnostic testing.
Smooth-scrolling improvements
Several issues discovered during real-world testing have been corrected.
Refresh-rate settings
The selected smooth-scroll refresh rate now applies immediately and consistently to both:
- JS Playlist; and
- Smooth Playlist Manager.
Supported presets remain:
- 8 ms
- 10 ms
- 12 ms
- 16 ms
Custom values remain supported within the documented ranges.
Changing the refresh rate while scrolling now rebuilds or reschedules the active animation without losing its current target.
JS Playlist wheel scrolling
JS Playlist now uses the same demand-driven frame-loop architecture as Playlist Manager rather than raw interval timers.
Each frame performs the complete sequence:
wait for the selected interval
→ update the scroll position
→ repaint
→ schedule the next frame
This makes 8 ms and 16 ms scrolling visually and functionally distinct while retaining smooth easing.
Scrollbar dragging
Scrollbar dragging now uses its own continuous frame loop and latest-target model.
This allows the playlist to render intermediate positions between mouse-movement callbacks, meaning the selected 8, 10, 12 or 16 ms rate genuinely controls drag smoothness.
The revised implementation supports:
- row-snapped dragging;
- continuous free-position dragging;
- exact final positioning when the mouse button is released;
- immediate dragging when smooth scrolling is disabled;
- live refresh-rate changes during an active drag; and
- complete timer shutdown when movement finishes.
Display fixes
Dot Matrix display style
Fixed an issue where selecting Dot Matrix from the Display Style menu did not visibly change the Display.
The optimised rendering paths are now correctly separated:
- mutable off-screen Dot Matrix composition uses
IJSImage; and - final panel rendering uses cached
IJSBitmapresources.
Changing Display Style now:
- validates and saves the selected style;
- rebuilds style-specific render resources;
- refreshes the current display values; and
- repaints immediately.
Native JScript Panel method handling
JScript Panel native API methods can report their JavaScript type as unknown rather than function.
The performance helpers now call native methods safely through try/catch, covering:
CreateBitmap()LoadBitmap()LoadImage()Dispose()CreateProfiler()
This resolves the type-mismatch errors previously seen in JS Playlist artwork and Display rendering.
Documentation improvements
The Configuration Guide has received a complete audit against the user-facing context menus and settings available throughout the supported layout.
New or expanded coverage includes:
- Playlist Manager row and empty-area menus;
- playlist filtering and appearance controls;
- JS Playlist track and empty-area context menus;
- playlist header options;
- the complete JS Playlist Panel Settings interface;
- InfoStack empty-area context menus;
- Biography and Last.fm page menus;
- Album Notes and MusicBrainz controls;
- Properties page controls;
- optional scripted Queue Viewer settings;
- left and right control-panel menus;
- optional button configuration;
- button style, depth and roundness;
- volume-knob settings;
- DarkOne Tools;
- Album Art;
- Display;
- Waveform host;
- Quick Search Toolbar; and
- Enhanced Spectrum Analyser ownership boundaries.
Formatting checks now ensure Configuration Guide headings remain properly separated from surrounding lists and paragraphs.
Standard and portable installation paths
The README and Installation Guide now explicitly document both standard and portable foobar2000 installations.
Standard installation
For a normal non-portable foobar2000 installation, the active profile is normally located at:
%APPDATA%\foobar2000-v2\profile\
This usually expands to:
C:\Users\<username>\AppData\Roaming\foobar2000-v2\profile\
Install the supplied folders so the resulting paths are:
%APPDATA%\foobar2000-v2\profile\DarkOneJSP3\
%APPDATA%\foobar2000-v2\profile\user-components-x64\foo_jscript_panel3\samples\
You can paste the following directly into the File Explorer address bar:
%APPDATA%\foobar2000-v2\profile
Portable installation
Portable installations may use either the installation root:
<foobar2000>\DarkOneJSP3\
<foobar2000>\user-components-x64\foo_jscript_panel3\samples\
or a profile subfolder:
<foobar2000>\profile\DarkOneJSP3\
<foobar2000>\profile\user-components-x64\foo_jscript_panel3\samples\
Use the structure already used by your foobar2000 installation. Do not install the files into more than one profile location.
Diagnostic settings
The following optional properties are available through the relevant panel’s Configure... property editor:
JSPLAYLIST.Enable Render Cache
JSPLAYLIST.Render Cache Rows
JSPLAYLIST.Enable Performance Profiling
SMOOTH.Enable Performance Profiling
Performance profiling is disabled by default.
Validation and hardening
The release validator now includes additional checks for:
- demand-driven scheduler behaviour;
- timer shutdown and rescheduling;
- live refresh-rate changes;
- wheel and scrollbar-drag cadence;
- bitmap creation and disposal;
- Dot Matrix display switching;
- render-cache invalidation;
- hidden-panel repaint recovery;
- Configuration Guide menu coverage;
- documentation formatting;
- required runtime files and artwork;
- manifest consistency; and
- compatibility mirrors.
Final release verification completed successfully:
- 187 audited files
- Zero warnings
- ZIP integrity test passed
- Clean re-extraction passed the complete validation suite
DarkOneJSP3.fcl remains manually maintained and is excluded from automated auditing and modification by project tooling.
Compatibility and upgrade notes
This release includes updated JScript Panel scripts and a newly exported:
DarkOneJSP3\fcl\DarkOneJSP3.fcl
Although some existing saved properties may continue to work, panel settings and configuration values from earlier releases should not be assumed to be fully compatible with v0.9.8.
Before upgrading:
- Back up your active foobar2000 profile.
- Export or record any personal Columns UI layout changes you wish to keep.
- Merge the supplied
DarkOneJSP3anduser-components-x64directories into the profile location used by your installation. - Import the newly packaged
DarkOneJSP3.fcl. - Reapply any personal layout or panel customisations where required.
Re-importing the supplied FCL is recommended to ensure that the updated JScript Panel scripts, panel assignments and layout configuration are applied consistently.
Importing the FCL may replace your existing Columns UI layout and panel configuration. Users upgrading from an earlier release should therefore treat v0.9.8 as a refreshed layout and configuration baseline rather than a completely drop-in update.
Some component-level preferences may remain in place independently of the imported layout.
Important notice
DarkOneJSP3 is an unofficial community continuation. It is not an official release by tedGo, marc2003, Br3tt/Falstaff, dima-lur, Peter Pawlowski or the authors of the third-party components it uses.
Preserve all existing author headers, credits and third-party licence notices.
DarkOneJSP3 is supplied without warranty. Back up your foobar2000 profile before installation or upgrade.