Link here:
VideoJuke - 1.01
In this release:
A few things that have long been in the works have reached maturity, and now, after many years of work, we are finally ready to publish the main branch.
This is a MAJOR milestone upgrade.We've eliminated all the bugs on our To-Do list and we're happy with the status of all the planned features, so we're moving out of the beta, and entering production: version 1.01 follows the last public beta, 0.972b.
You know what this means -
THE ANDROID AND LINUX VERSIONS ARE NOW READY!Please read first: controls.ini has changedIn short: Tab now moves the focus through the clickable icons (BTN_GUI_NEXT), the way it does in other Windows apps, instead of toggling zoom (zoom stays on Z). Your own controls.ini is never replaced behind your back: the jukebox
offers the new key bindings, and you choose.
A few seconds after startup, the jukebox compares the bindings in your controls.ini with the ones that ship with it. If they differ, a banner lists the changes (for example, 'KEY_TAB: BTN_ZOOM → BTN_GUI_NEXT') and gives you three choices:
- Merge changes just those bindings in your file. Everything else is left alone: your own bindings, your comments and your layout. Your file as it was is kept beside it as controls.ini.<date>-<time>.bak, and the new bindings take effect straight away - no restart needed.
- Not now closes the banner; you'll be asked again next time the jukebox starts.
- Ignore this change means you won't be asked about that change again. If a later release changes the bindings once more, you'll be offered that one.
Handy to know:
- The first time, the jukebox can't tell your own changes from old defaults, so every difference is offered. Check the list; your old file is in the .bak if you want something back. After you've merged, any binding you change yourself is yours: later offers only touch bindings you haven't changed.
- Restoring a configuration backup that has a controls.ini runs the check again on it. The banner isn't shown in kiosk mode.
Tab and the icons: keyboard users can now reach every clickable icon. Tab moves forward through them in reading order, and past the last one it goes back out to the track cards. While an icon has the focus, the arrow keys (or D-pad) move to the nearest icon, and Space or Enter presses it. If you'd rather keep Tab as zoom, choose 'Ignore this change' - or put KEY_TAB = BTN_ZOOM back after merging.
Out of betaRelease builds no longer expire, and the 'beta' message at startup has been replaced.
Just as before, unregistered copies run the same as the 'full' version: everything works, but the library is limited to 24 songs/videos. A short notice says so at startup - register (Options Menu > Registration) to remove this limitation.
Registered users get no startup popup at all. Your registration details are now in the new Options Menu > About screen (see below).
Adjust SettingsIn addition to the standard DWJuke options (most of which are now handled), there are now over 150 new options to tinker with, which makes hand-editing quite cumbersome. To combat this, we're introducing a settings screen (a new Options Menu option, 'Adjust Settings') to adjust all settings in jukebox.ini (excluding deprecated), applying new settings in realtime (requesting a restart or media rescan if necessary). A skin reload will happen automatically as required.
We also (optionally) write back to jukebox.ini, which provides a nice easy way to update your startup configuration.
Any options you've modified will be preserved, and any changed or deprecated/unused variables are handled cleanly, and will all be relocated to the correct place if/when the jukebox.ini gets saved.
The most recent shipped jukebox.ini file will blend in neatly with any existing version whenever you open Adjust Settings, and any non-existing options will be clearly marked, with the option to view them before applying. They're also listed with the rest of the settings (marked 'New'), at the values the jukebox is currently using - so you can switch on a new feature (or change any of them) before saving.
We track legacy option names, so if/when an option is renamed/moved, older ini files will be updated automatically.
Each setting gets a sensible control:
- On/off settings are switches.
- Numbers with a range are sliders, with a box to type an exact value. Timers show in minutes and seconds (eg 'ScreenSaverTimeout', 'AutoFlipTimer', 'HideMouseTimer').
- Colours, fonts, folders and files all get their own picker type.
- Settings with a fixed set of choices are picklists - 'IntroMusic' lists the sound files found in your skins and resource folders, with the option to add your own.
- Options that only matter while another is on (eg the song info options, while 'ShowSongInfo' is on) only show when they apply.
This also provides a much simpler way to update your SongPaths ('Song folders'), and an easy way to add/remove/reorder the skins you have available (and pick the one the jukebox starts with; skin changes take effect immediately), along with a list of your resource paths, with a folder picker to add more. Hover a skin in the list to see its version, author, description and notes.
The visualiser options have grown a bit, so they now get their own section (they're still stored in [Settings] in jukebox.ini). There are a number of new modes, most of which also make use of the VisualiserBackground capability - if you like the GPU screensavers (like Plasma, or Smoke), you can now have them as the visualiser background, and if you combine that with beat detection, they will 'pulse' to the beat. You can also expand the visualiser when the screensaver kicks in, using the 'FullScreenMedia' option.
'VisualisationTransparency' (the media display's opacity on a single screen) now behaves as it says: 100 is fully opaque, on a solid black background, and anything lower lets the main screen show through (a value like 75 used to be drawn as about 56). Changes made with BTN_TRANS_UP / BTN_TRANS_DOWN show on the settings screen as changes not saved yet, so Save keeps them. With a second screen the media display is always opaque, so the setting isn't shown.
Also on the settings screen:
- 'Set all to defaults' puts every setting back to the jukebox's own default (with a warning first - nothing is written to jukebox.ini until you save, so it can be undone). Your song folders, skins and resource paths are kept. A button does the same for just the current section.
- Any setting that isn't at its default has its own 'Set default' button (hover over it to see the default).
- A search box at the top finds an option by name (or part of it).
- 'Save a copy of jukebox.ini' saves your jukebox.ini, with the settings as currently applied (saved or not), wherever you like - your 'startup' jukebox.ini can be left as it is.
- The 'DebugScreen' has a 'Test' button, to preview your chosen test pattern - any key, click or tap returns to the settings.
- The screen remembers where you put it: move it by its title bar and resize it by its edges, and it opens there next time, even after a restart (double-click the title bar to put it back). It reopens on the section you were last in (until the jukebox restarts), and the arrow at the left of the title goes back to the Options Menu.
A new Options Menu option: 'About' - the version you're running, and who it's registered to.
A new Options Menu option: 'Configuration', with two choices:
- 'Back up configuration' saves your whole configuration in a single zip file, wherever you like: your jukebox.ini, controls.ini, and your activation and license files. Keep it somewhere safe, as your activation key and license are unique to the machine they were saved on - restoring them elsewhere will cause an error. The jukebox.ini in the backup is the most recently saved one - save any changes you wish to keep first (or use 'Save a copy of jukebox.ini').
- 'Restore configuration' puts a backup back. It shows which files it will replace, and asks before going ahead. Your current files are kept (in config-before-restore.zip, in the jukebox folder), then the jukebox restarts to use the restored configuration. If the backup has a controls.ini, the check for a newer controls.ini (see the top of this post) runs afresh on it - even for a change you'd ignored before. Handy for saving everything before experimenting. On Android, the system file picker is used, so the backup can go to your Downloads folder, a USB stick, cloud storage, etc.
Command LineA new command line switch: 'kiosk' - the Options menu is completely disabled for the current session.
Audio visualiserThe visualiser has been upgraded, and now has its own menu, in addition to the mode quick change menu that was already there.
- A 'Test this machine' button in the Visualiser menu offers sane defaults tailored to your hardware.
- On most systems, drawing is now done on the GPU, giving smooth movement at the display's full frame rate, for far less work.
- Up to 1024 bars ('VisualiserChannelCount'), which grow/shrink to match volume.
- Finer frequency detail: 'VisualiserFFTSize' from 512 up to 32768. 'VisualiserHighRes' keeps the updates coming quickly at any size.
- Tune the response: 'VisualiserFFTSmoothing', and the loudness range shown ('VisualiserDbFloor' / 'VisualiserDbCeiling').
- 'VisualiserPeakHold': each bar's recent peak is marked, then falls away.
- 'VisualiserRenderer' (Auto / GPU / CPU): on some Windows systems, GPU shaders are slower than plain drawing - Auto picks the best choice.
- 'VisualiserShowStats': shows what the visualiser costs, for the curious (or for bug reports).
- 'VisualiserBeatDetection': picks the beat out of the music - a dot can be enabled over the visualiser to pulse on each beat (red for a kick drum, blue for a snare, yellow for a hi-hat), with the tempo in beats per minute. Works best with 'VisualiserHighRes'.
- The visualiser works with MP3, WAV, FLAC and Ogg (Vorbis/Opus) files. M4A (AAC) and WMA are played by the video player, without the visualiser.
Linux versionHave only tested on a WSL install of Ubuntu so far. Looks identical to the Windows (Single Screen Only) version, and respects your system light/dark mode. The tarball contains the app binary, a desktop icon, and all the required data. Unzip it somewhere and run videojuke; simple!

In the works now is a Raspberry Pi-specific version - more on that when it's a bit more ready.
Android- The display always fills the screen (even if that distorts the aspect ratio a little).
- External displays are fully supported: the second screen shows the video, or for audio tracks, the visualiser (ie, same as Windows version). Notifications for that screen show there too.
- Double-tap the media display to zoom it to full screen, and again to return.
- 'Song folders': We have added the standard Android file locations, but (on recent Android versions) you will need to allow the app file access permission. You can modify SongPaths by long-pressing the screen to open the Options Menu, then tapping 'Adjust Settings' to add/remove your music folders. The app's own folder can't be browsed on recent Android versions.
- BTN_SCREENSHOT saves to Pictures/VideoJuke, so screenshots show in your gallery.
- The screen stays awake after playback stops.
- Gamepads should work just as well here as in Windows (untested yet).
Screensavers- For those using the Slideshow screensaver, we've added a 'SlideShowDisplayFilename' option, to allow for disabling the filename showing on each slide.
- The 'Tunnel' screensaver now uses alpha blending (instead of arbitrary depth assignment): the 'far end' of the tunnel appears much more smoothly, with no visible 'color banding' on longer tunnels. We've also tweaked the geometry, so 3 and 4 sided tunnels always align the bottom side of the tunnel with the bottom of the screen, and adjusted the parameter limits for more flexibility and to avoid known line clipping edge cases.
- The 'Mandelbrot' screensaver has been reworked to zoom much, much deeper, with smooth colour bands. Screenshots of it record exactly where they were taken (on Android, they go to Pictures/Mandelbrot).
- One more screensaver to add to the collection: 'Nebula' - a rotating nebula cloud over a glittering star field.
- Cover art now shows (centred, and cross-fading between tracks) when the screensaver starts. When nothing is playing, there is no cover art - the last track's isn't left showing.
- FullScreenMedia (default False): in single-screen mode, if the screensaver starts while media is playing, the video/audio visualiser is shown full screen instead. It returns to its normal size when the screensaver ends. "Single screen" includes Android without an external display.
- FullScreenMediaSongInfo (default True): shows the song-info text over the media visualiser. Set it False for just the video. It only appears in Adjust Settings while FullScreenMedia is on, and only shows text if ShowSongInfo is on.
- The text overlay has been completely rewritten to be much smoother when updating. The edge bounce effect is now much tighter, and the 'Runtime' text stays centered (no more shifting when the digits change width). The collision detection between overlay texts had been silently disabled; it's back as a user control: with 'SongInfoCollide' true, each line of text collides with every other line instead of simply overlapping. 'SongInfoGroupText' keeps all the song info in one rigid block.
If any of 'SongInfoColor', 'SongInfoWidth', 'SongInfoHeight', or 'SongInfoBgcolor' are specified in the jukebox.ini, we'll automatically switch the text overlay to 'Classic' mode - the song info is shown in a single color ('SongInfoColor'), grouped inside a box 'SongInfoWidth' pixels wide and 'SongInfoHeight' pixels high (similar to DW Juke; height will expand/contract to fit text if necessary). 'SongInfoClassic' = true forces classic mode, using defaults for any values not specified.
Everything elseData de-duplication is now available as an option, but be warned: it will increase the initial media scanning time, so it's only worth using if you may have the exact same file stored in several locations and don't want it showing up more than once in your library. What it does and doesn't do:
- Identical files at different paths are shown once.
- If several song paths point to the same files (eg. Songpath1 = "C:\Music\" and Songpath2 = "C:\Music\Abba"), the files are shown once anyway, as the full file path is the same - and only scanned once. A song path that's the same as another, or inside another, is skipped when scanning (it's kept in your jukebox.ini, and marked 'Duplicate' in Adjust Settings and Song folders).
- The same track stored several times, but with different content (eg different bitrates, or from different albums), counts as different files, and still shows as multiple items.
- Once a file has been scanned, its 'fingerprint' is stored in the database and used to cut later scan times - so if you add a new SongPath and rescan, it'll be much quicker the second time around.
On the subject of scanning, the new multi-threaded scanning engine is now active, reducing scan times significantly (which also helps with deduplication). Database load times are now incredibly quick too - we've clocked it loading 50000 tracks in under 2 seconds (from SSD; your mileage may vary if using spinning rust).
The user-customisation option 'DebugScreen' for the Test Pattern screen (which should only ever show up if a serious error occurs) is now ready for use.
A new option to start the jukebox with the volume at whatever the current system volume is: 'UseSystemVolume' (falls back to Volume if the system volume can't be read).
BTN_GUI functions now move the currently selected icon focus pointer properly (especially useful for keyboardless operation - like with a gamepad). Notifications can now also be closed with Delete or Escape.
Found and squashed the last known bugs, including:
- Fixed: The visualiser bars are now correct - previously, they may have doubled up, and the frequency legend was out.
- Fixed: When in Windowed single-screen mode, moving the window to a second monitor and double-clicking the title bar now expands the window to fill the current monitor (instead of flicking back to the original monitor).
- Fixed: When the screensaver has been running a while, or when display orientation changes during the screensaver, the icon deck and song cards now restore correctly.
- Fixed: A 'double-close' bug with the media player sub-screen, which sometimes hung (and spewed errors to log).
- Fixed: Component licenses (now in Options Menu > About) always show 'Close' and 'back' buttons.
- Fixed: 'Exit' (Options Menu) always shows its confirmation dialog centered on the primary display (it could span 2 displays). All other dialogs now do the same.
- Fixed: When orientation/skin scaling changes on Android (single-screen mode) during video playback, the media display position moves correctly.
- Fixed: When the app is pushed to background on Android, video playback no longer pauses when it returns to foreground.
- Fixed: 'Abandon scan now'. If BTN_SHUTDOWN is pressed during a media scan, we stop whatever we're doing and exit as soon as possible (we used to wait for the scan to finish). During a scan you can also press Escape (or click Stop on the progress indicator) to skip the rest of the scan and carry on with what we have so far. (If BTN_SHUTDOWN is mapped to Escape, the scan stops on the first press; a second press exits the app.)
- Fixed: Exiting could freeze with a second screen attached.
- Fixed: Skin sound effects are preloaded and now play instantly. Sound effects no longer loop (after the intro music), and page-turn buttons play their skin sound.
- Fixed: The first track could start twice at startup.
- Fixed: Keyboard control is restored properly when a dialog closes, and after the screensaver ends while a video is shown full screen.
- Fixed: The selection focus border is hidden when there's nothing to move it. Icons that aren't buttons (lamps, labels) no longer get a focus box, and their artwork is no longer shrunk to make room for one.
- Fixed: A corrupt media file can no longer stop a library scan - it gets skipped, and the scan carries on.
- Fixed: Dialog box state tracking now reliably reports back if a dialog box is active.
- Fixed: Snackbar position moved up slightly to prevent displaying half off screen on Android when changing from landscape to portrait (letterboxed) orientation.
- Added: Checks (made with media deduplication in mind) to detect whether the system has actually stopped responding, or is just slowly progressing.
If you find a bug and wish to report it, please turn on maximum debugging (DebugLevel=5), and re-run. Please send me the resulting log for investigation, along with a description of the issue, and we'll hunt it down.
Changes:
- Added: New skins 'CD4' (for CD display mode), and 'Droid' and 'DroidPortrait' (a simple interface, primarily aimed at Android, but clean and uncomplicated on any platform).
- Changed: Double-taps/double-clicks outside the media visualiser window (in single-screen mode) no longer zoom the media display - only inside the window.
- Added: A skin registry, used to tell which skins (and versions) are installed, and which could be offered for installation/upgrade. It lives in the new 'System' table in the database (see below).
- Added: A newer controls.ini is offered at startup - 'Merge', 'Not now' or 'Ignore this change' (see the top of this post). Changed: KEY_TAB is now BTN_GUI_NEXT (icon focus) in the shipped controls.ini.
- Added: BTN_GUI_NEXT and BTN_GUI_PREV (keyboard focus on the icons) can be mapped to any key or button; BTN_GUI_PREV isn't mapped by default.
- Added: Option: jukebox.ini > Display > IconFocusBoxThickness - the thickness of the line around the icon under the pointer or keyboard focus, in skin pixels (Auto, or 0 for none).
- Added: Options: jukebox.ini > screensaver > SlideShowDisplayFilename, SongInfoCollide, SongInfoGroupText, SongInfoClassic, FullScreenMedia, FullScreenMediaSongInfo.
- Added: Option: jukebox.ini > VolumeControl > UseSystemVolume.
- Added: Options: jukebox.ini > settings > VisualiserFFTSize, VisualiserHighRes, VisualiserFFTSmoothing, VisualiserDbFloor, VisualiserDbCeiling, VisualiserPeakHold, VisualiserRenderer, VisualiserShowStats, VisualiserBeatDetection.
- Added: If no keyboard/joystick is detected (no way to move the focus pointer), the focus border is turned off, and back on when one is connected (if enabled in the skin file) - mainly for Android. On Windows, you can turn it off in the skin file (skin.ini > TitleStrips > FocusStyle = none).
- Added: Registration dialog: 'Export Activation Request' and 'Import License File'.
- Enabled: Option: jukebox.ini > settings > DebugScreen.
- Renamed: jukebox.ini > settings > EnableVisualisation is now VisualiserEnabled (the old name is still read, and updated when you save).
- Moved: The SongInfoFont options are now in [ScreenSaver].
- Moved: jukebox.ini > system > Deduplicate is now in [Index] (below UpdateIndex), with ExtensionsAudio, ExtensionsVideo, IgnoreLeadingArticleArtist and IgnoreLeadingArticleAlbum (from [Settings]).
- Moved: jukebox.ini > settings > BlinkCredit, DebugScreen, VideoFileColor, ScanProgressShow, ScanProgressColor, SelectionNumberDisplayed, SelectionNumberColor, SelectionNumberFont and SelectionNumberSize are now in [Display].
- Moved: jukebox.ini > settings > HardMute is now in [VolumeControl].
- Moved: jukebox.ini > system > MouseOverToolTipsEnabled, HideMousePointer and HideMouseTimer are now in [Mouse]. (NOTE: With all of these moves, the old places are still read, and the settings moved when you save.)
- Changed: Media database schema is now version 2: each track also records the size and modified time of its file, ready for faster re-scans that skip unchanged files. Your existing database is upgraded automatically the first time this version opens it - no rescan needed, no data lost. (Once upgraded, an earlier version should still be able to open the file, but we haven't tested going back, so keep a copy of your data folder if you might.) The upgrade also adds the Play History tables, which keep track of every item ever played (see the 'Play History' Options Menu item), and a small 'System' table, where the jukebox keeps its own bookkeeping: which bundled skins it has seen, installed or skipped, and which controls.ini changes you've ignored.
- Removed: jukebox.ini > system > DontDisplayRegistrationStatus (see Options Menu > About).
- Fixed: 'AllowStaleDuplicates' checking, so that option now works correctly. Ini setting 'MouseOverToolTipsEnabled' handling corrected.
- Fixed: Screensaver 'Tunnel': if 'SpokeCount' is 3 or 4, align the tunnel with the bottom of the screen.
- Fixed: Race condition with dialog and Radio mode - if a dialog is visible, the first track did not start.
- Fixed: Icon scaling underflow error when the window is shrunk to a very small size.
- Fixed: Visualiser FFT legend now displays correct values, and scales correctly for small displays (and disappears completely if the screen is too small).
- Refactored: watchdog logging, skin initialisation, the screensaver song info text, Tunnel alpha blending and media sorting. Removed a pile of dead/unused variables and ini options, and cleaned up the ini file generation.