Changelog

QUP Karaoke Engine — Changelog

What's new in QUP Karaoke Engine

QUP Karaoke Engine — Changelog (v2.0.42 onwards)


QUP Karaoke Engine — v2.8.2

Released August 14, 2026 · Previous version: 2.8.1

  • Fixed — DJ mode's crossfader was dead on a fresh install, on every platform. New installs (and anyone who had never touched the old karaoke crossfade settings) opened DJ mode to a crossfader that did nothing, with no way to turn it on from the DJ screen itself.
  • Fixed — on macOS, DJ mode's lyrics could flicker or drop to black for an instant, due to a rare timing issue in the video compositor.

QUP Karaoke Engine — v2.8.1

Released August 12, 2026 · Previous version: 2.8.0

  • Fixed — the MilkDrop visualizer could fail to load on Windows. On some installs it would silently fall back to plain lyrics instead of the projectM visuals, with nothing on screen indicating anything had gone wrong.

QUP Karaoke Engine — v2.8.0

Released August 12, 2026 · Previous version: 2.7.0

  • New — DJ mode. QUP is now two apps in one: karaoke, and a real two-deck DJ mode, switchable from the same install. Two decks with waveform seek, tempo control, per-deck EQ, and a proper pre-fader cue bus. Beatgrids and SYNC keep tracks locked together; scratch behaves like a real platter, including catching a track mid-throw. A constant-power crossfader blends between them, and MP4 video decks bring the same experience to video mixing, sharing the same GL visual layer.
  • New — Auto DJ. Set-and-forget, beatmatched automatic mixing: build named crates from folder drops, m3u imports, or a genre fill, then arm it and it keeps going, yielding control back to you with one touch whenever you want it.
  • New — FLAC and OGG playback, on both the karaoke and DJ sides.
  • New — MilkDrop starter preset pack, so the visualizer has real presets to show on first boot instead of the 37 plain engine test presets. A "Download the Cream of the Crop pack" button pulls in a larger curated pack in one click. Presets can now be grouped into playlists and ticked to shuffle only from a subset.
  • New — first macOS Apple Silicon (M-series) build. Previous releases ran under Rosetta; this one runs natively.
  • Improved — cold start is faster. QUP now runs on Java 25 — DJ mode starts about 28% faster and karaoke about 20% faster than the previous release.
  • For plugin developers — VisualizationPlugin gained direct GL rendering (supportsDirectGl(), glAdopt(), glRenderFrame(), glRelease(), publishHostFrame()) for visualizations that already draw in OpenGL, skipping the per-frame image readback. PluginContext.isDjMode() lets a plugin tell whether the room is in karaoke or DJ mode and gate its own menu entries accordingly. Full reference on the Plugin API page.

QUP Karaoke Engine — v2.7.0

Released August 7, 2026 · Previous version: 2.6.1

  • New — MilkDrop visuals behind the lyrics. QUP now runs real MilkDrop .milk presets as a background, through projectM. It reacts to the song the room is hearing, and to the filler music between songs. Windows, macOS and Linux. Turn it on under Media Library → Plugins → Backgrounds → MilkDrop, where there is a live preview of exactly what the projector will composite behind the words.
  • New — preset controls. Pick a preset from the list, jump to the next or a random one, or let it cycle on a timer with optional shuffle. Turning cycling off pins the preset you chose. A search box narrows the list, which matters: a full MilkDrop pack runs to about ten thousand presets.
  • New — preset playlists. Group the presets you like into named playlists, then tick one or more to shuffle only from those. Nothing ticked plays everything. Playlists are plain text files you can hand-edit if you prefer.
  • QUP ships only projectM's own test presets, which are deliberately plain. Point the plugin at a downloaded MilkDrop preset pack under its settings to get the real thing.
  • New — a master dim for whatever is drawn behind the lyrics, applied on top of a background's own brightness. The preview shows the dimmed result, so "will the words still be readable" is answerable before the song starts rather than after.
  • Improved — backgrounds now composite at 30fps instead of 15. A pre-recorded video mostly survived the lower rate; anything reacting to the music did not, and looked like a slideshow no matter how fast it was actually drawing.
  • Fixed — column widths and column order are now remembered on every list in QUP. Two of them saved their layout properly; four more saved part of it — the Rotation and Singer Database, for instance, kept column widths but forgot any reordering — and the rest saved nothing at all. Every list now remembers both, and layouts are saved as you adjust them rather than only on a clean exit.
  • Fixed — an existing saved column layout is carried over, so widths and ordering you have already set are not reset by this change.

QUP Karaoke Engine — v2.6.1

Released August 7, 2026 · Previous version: 2.6.0

Hotfix. If you are on 2.6.0, update.

  • Fixed — QUP could freeze on startup. The lyrics window appeared but the main window never did, and the app sat using a full CPU core. This was introduced in 2.6.0 by the fix that made collapsed Media Library folders stay collapsed: restoring the saved folder state could get stuck in a loop while plugins were still loading, leaving the interface unable to finish drawing. Whether it happened depended on which folders you had collapsed and on plugin load timing, so it did not affect every 2.6.0 install — but where it did, QUP would not start at all.

Nothing else has changed since 2.6.0.


QUP Karaoke Engine — v2.6.0

Released August 6, 2026 · Previous version: 2.5.0

  • New — background visualizations. Whatever is drawn behind the lyrics is now one kind of thing you pick from, in Config → Plugins → Background Visualization, and only one can be active at a time. Music Video Backgrounds is the first of them; "None" gives you plain lyrics. The picker appears once you have a visualization installed.
  • New — "Start videos with audio". Karaoke tracks often open with a second or two of silence before the music, and the video used to start with the file and stay that far ahead of the song the whole way through. QUP now holds the video on its first frame until it actually hears the karaoke, then starts it in step. On by default, and it does nothing on tracks that start immediately.
  • Fixed — the video brightness slider did nothing. Music Video Backgrounds has had a "Video brightness" control that was saved but never reached the projector — the brightness was fixed in code. It works now, and takes effect while you drag it rather than on the next song.
  • Fixed — auto-crossfade in Silence mode could stop working entirely. Raise the CUT slider past about halfway and the silence and resume detectors overlapped and cancelled each other out, so filler never came up in the gaps. Near the top of the range it was worse: filler never ducked at all and played over the whole song. Silence mode now behaves across the full range of the slider.
  • Fixed — the CUT threshold line on the meter lines up with the CUT slider across its whole travel.
  • Fixed — the list font size no longer resets on the Playlist and Rotation after a restart. The size was always saved correctly; those two panes simply never picked it up when they were built, so they came back at the default until you touched the setting.
  • Fixed — Media Library folders you collapsed stay collapsed. They were reopened on every launch. Folders nested inside others — the Audio and General groups under Plugins — could not be remembered at all before, and now are.
  • Fixed — the Internet Radio station sync stops cleanly when QUP closes, instead of continuing to download into a database that is shutting down.
  • Changed — the row order list and height weight boxes are gone from Skin & Layout. They stopped doing anything in v2.0.27, when the main window moved to dockable panes — reordering wrote a setting nothing read back. Arrange panes by floating and docking them and by dragging the divider. Skin selection and font size are unchanged.
  • For plugin developers — new VisualizationPlugin interface for drawing behind the lyrics, PluginContext.setKaraokeAudioTap() for the decoded karaoke stream, and startVideoWithAudio() / getVideoDimLevel() on PlaybackListenerPlugin. All have defaults, so existing plugins need no changes. Full reference on the Plugin API page.

QUP Karaoke Engine — v2.5.0

Released July 31, 2026 · Previous version: 2.4.1

This release is about one thing: settings you changed that QUP then forgot. If you have ever set something in the control panel, come back later and found it reverted, this is the release that fixes it.

  • Fixed — control panel settings now save when you close the window. Several sections only wrote their settings when you pressed an Apply or Save button. Change something, close the window, and the change was quietly thrown away. This affected Cloud, Kiosk Security, Discord Party, OBS, Music Video and SongShop.
  • Fixed — disabling the Discord Party plugin now sticks. Unticking "Enable Discord room automation" and quitting brought it back enabled on the next launch, because that setting was only written by the Save button.
  • Fixed — the list text size under Skin & Layout stopped resetting. Your chosen size was being saved correctly all along, then overwritten with the default every time QUP started and every time you changed skins.
  • Fixed — Skin & Layout could not save at all. The section was added to the control panel in a way that discarded it, so nothing in it could be persisted.
  • Fixed — "Enable Kiosk Song Purchase" never recorded its own setting. It silently followed whatever the main Tricerasoft enable was set to.
  • Fixed — the Tricerasoft auto-up credit limit dropped the last digit you typed, and ignored pasted values entirely. Entering 50 stored 5.
  • Fixed — the two database backup checkboxes showed each other's setting after a restart, so correcting one silently flipped the other.
  • Fixed — the Enable DBV checkbox for kiosk 4 never showed its saved setting, and kiosk 3's box showed kiosk 4's.
  • Fixed — a configured Discord announcements channel could be erased. If QUP saved while the Discord bot was not connected, the empty channel list overwrote your setting with a blank.
  • Fixed — your SongShop login could be destroyed if the stored password could not be read back. QUP now leaves unreadable saved credentials alone instead of overwriting them with blanks.
  • Fixed — in SongShop, a download folder typed and then locked was discarded, with no way to re-enter it because locking makes the panel read-only.
  • Fixed — a crash on the kiosk screen when kiosk 1 was connected and kiosk 2 was not.
  • Improved — settings save when you close the control panel, not only when QUP exits. A show runs for hours, and a crash or a forced quit previously lost everything you had changed since launch.
  • Improved — the Internet Radio station sync now stops cleanly when QUP closes. It used to keep downloading and writing to the station database during shutdown, which could leave the station list half-updated.
  • Improved — the rotation debug log records the rotation order each placement was judged against, making it possible to see exactly why a singer landed where they did.
  • For plugin developers — QUPPlugin gains onConfigPanelClosed(), called whenever the config window closes and again just before shutdown(). Persist settings there instead: plugins taking more than 3 seconds to shut down are abandoned, which can kill a save. It has a default empty implementation, so existing plugins need no changes.

QUP Karaoke Engine — v2.4.1

Released July 31, 2026 · Previous version: 2.4.0

  • Fixed — "Min singers in playlist" now actually works. This setting was saved and shown in Config → Bribe but never enforced. Bribing now stays switched off until that many different singers have a song waiting, so nobody can buy their way up a near-empty rotation. Singers see the reason on the kiosk and phone instead of an empty list. Leave it at 0 for no minimum.
  • Fixed — a dead session could bounce the next patron straight back to the scan screen. When a phone session expired, the "session gone" response was being cached by the browser and replayed to the next person who scanned on that device, kicking them out on their first refresh. Fixed on the server, so it no longer depends on the app being up to date.
  • Improved — the touchscreen kiosk greys out slots it cannot sell. Positions blocked by your bribe rules now show greyed with LOCKED in place of the price, and tapping them does nothing, matching what the phone app already did. Requires the updated kiosk download.

QUP Karaoke Engine — v2.4.0

Released July 31, 2026 · Previous version: 2.3.1

  • New — you decide what a bribe is allowed to jump. Some songs in the queue are protected: ones you dragged into place, ones someone already paid to move, singers who have waited past the maximum wait time, and the locked top of the queue. Each of those now has its own switch in Config → Bribe, plus its own cost multiplier, so a jump can be expensive rather than impossible. A song carrying more than one protection needs all of them enabled and is priced at the highest single multiplier — premiums never stack.
  • New — counter-bribes are back. A singer can pay to jump ahead of someone else's paid jump, so the top slot stays for sale all night and whoever wants it most keeps paying. On by default at a 2× premium; turn it off in Config → Bribe if you would rather a paid jump be final. The sniped singer keeps their place relative to everyone else.
  • New — "Highest bribe position" actually works. This setting was previously saved but never enforced. Set it to 1 to allow bribing all the way up to the next singer, or to a higher number to keep the top of the queue off the market. 0 means no cap.
  • Fixed — new singers were losing their turn to bribed songs. With new-singer preference switched on, a first-timer was queued behind every song that had been bribed up, because a paid jump was being treated exactly like a KJ lock. A first-timer can now be placed ahead of a paid jump, which simply moves down one spot and keeps everything else it bought. There is a switch for this in Config → Bribe if you prefer money to always win.
  • Fixed — bribes from the kiosk never went through. Every bribe submitted from the touchscreen kiosk failed with "Playlist has been updated, please try your bribe request again," no matter how many times the singer retried.
  • Fixed — bribes from phones charged the wrong amount. Bribes submitted through the mobile app were deducting a small fraction of the real price, and the "not enough credits" check was not working. Both now charge and check correctly. If you run the paid bribe system, expect bribe charges to look right for the first time — which means noticeably higher than they have been.
  • Improved — singers can see what they cannot buy. Positions blocked by your settings now appear greyed out on the kiosk and phone with a short reason, instead of being offered and then refused after payment. The prices shown are the prices the system charges.

QUP Karaoke Engine — v2.3.1

Released July 31, 2026 · Previous version: 2.3.0

  • Fixed — rotation order is now exactly right. The singer rotation now strictly follows the proven rotation rules: new-singer priority actually takes effect, a first-timer's first song can't be jumped by a regular, and a returning singer whose songs were removed re-enters the current round instead of being pushed to the back. The rotation round can also no longer jump backward mid-night — this was behind singers appearing to sing back-to-back while others waited.
  • Changed — the Queue and Rotation panels no longer sort by clicking column headers. What you see is always the true play order. Sorted views looked harmless but silently made drags, moves and right-click actions hit the wrong entries. The search box still filters as before.
  • Fixed — song counters stay truthful. Removing, reverting or toggling a song as played kept phantom counts on the singer, quietly placing their next song in the wrong round.
  • Fixed — bribe jumps respect protections. A paid jump is refused if it would displace a locked, protected or already-played entry.
  • Fixed — Rotation panel right-click. "Remove From Rotation" and "Change Singer Name" work again.
  • Under the hood. Every one of these rules is now enforced by an automated full-night rotation simulator that runs on every build.

QUP Karaoke Engine — v2.3.0

Released July 29, 2026 · Previous version: 2.2.0

  • New — Discord Party. Run your karaoke night in a Discord voice channel and let QUP moderate it for you. QUP moves an "On Stage" role as the rotation advances, so only the singer whose song is playing can talk. The room opens between songs and for a short applause window at each end of a song, so people can cheer without talking over the performance. Singers claim their name with /iam in Discord — they enter their name and PIN in a private dialog only they can see. Configure it under Config → Plugins → Discord Party; there's a full setup guide in the documentation.
  • New — automatic handling of missing singers. If the person whose turn it is isn't in the voice channel, QUP pauses the song, pings them, and gives them a grace period to appear. If they turn up it resumes; if they don't it moves on to the next singer, exactly as if you'd pressed Next. An unattended room keeps running.
  • New — filler music into Discord. Optionally, QUP transmits your filler music into the voice channel between songs, so the room isn't silent while nobody is sharing their screen.
  • Fixed — microphones on macOS. Mic input didn't work at all on macOS: the app was missing the microphone entitlement, so the system blocked it without ever prompting. Also fixed a crash when changing microphones, and mic effects now work when your microphone and speakers are the same audio interface.
  • Fixed — songs queued from a phone ignored your rules. Max Singer Repeat and the closing-time cutoff were being bypassed for anything queued through the mobile or web path — one singer could fill the whole list. Songs queued by the KJ are unaffected and still override the limit as before.
  • Improved — singer PINs now reach the venue. A patron who signs up on their phone gets their PIN synced to your local singer database, so it works at the venue too. Existing singers pick theirs up the next time they sign in on their phone.
  • Improved — documentation. New guides for Discord Party, MIDI Karaoke, Mic Effects, AutoFiller, Genre Tagger, Internet Radio, the Metadata Editor and the Plugin Manager. See Documentation.

QUP Karaoke Engine — v2.2.0

Released July 25, 2026 · Previous version: 2.1.4

  • New — MIDI & Soft Karaoke (.mid / .midi / .kar). QUP now plays MIDI karaoke files through a built-in SoundFont synthesizer, with the lyrics on your projector and preview screens exactly like CDG — highlighted word-by-word as the song plays. A General MIDI SoundFont is bundled, so MIDI songs play out of the box, and you can import .mid, .midi and .kar files straight into your library.
  • New — per-instrument MIDI mixer (Media Library → Audio). Live VU meters and a volume knob for every instrument, mute the guide-vocal track for a true sing-along, switch SoundFonts on the fly, and save a custom mix per song. A built-in catalog lets you download hundreds of additional SoundFonts.
  • New — full MIDI transport. Key change (transpose), tempo, and seek for MIDI — all gap-free, no dropouts — and the music-video background now works with MIDI too, compositing the lyrics over the video.

QUP Karaoke Engine — v2.1.4

Released July 24, 2026 · Previous version: 2.1.3

  • New — Mic Effects tempo sync. Lock the mic echo/delay to the song's tempo (BPM). Tap the beat or let QUP auto-detect it, choose a note value (1/2 · 1/4 · 1/8), and the echo stays in time with the music. You can also save per-song mic-effect presets that load automatically when the song starts.
  • New — Analyze BPM in the Genre Tagger detects and stores the tempo of your whole library, so the mic echo is in sync the instant a song starts. QUP also fills in tempos in the background when nothing is playing.
  • Fixed — microphone inputs on macOS and Linux. The mic input picker now works on Mac (Core Audio) and Linux (ALSA/PulseAudio) — previously those platforms listed no microphones at all. Added an input driver selector that matches the audio-output settings.

QUP Karaoke Engine — v2.1.3

Released July 23, 2026 · Previous version: 2.1.2

  • New — Mic Effects. Add reverb and echo to your microphones, right from the Media Library (Plugins → Audio). Wet-only, and it works with whatever sound device you use.
  • The projector QR-code size slider now resizes the code across its full range (previously the change was barely visible).
  • Turning on "Show Wait Time" no longer blows up the up-next scroller text size.
  • Config-panel drop-down menus now display with the correct light theme.

QUP Karaoke Engine — v2.1.2

Released July 23, 2026 · Previous version: 2.1.1

  • Security vulnerability hotfix — a recommended update for all users.

QUP Karaoke Engine — v2.1.1

Released July 23, 2026 · Previous version: 2.1.0

A quick follow-up to 2.1.0 with a handful of fixes:

  • macOS — the app now launches on a clean Mac. The 2.1.0 DMG could fail to start at launch on machines without certain developer tools present; the runtime is now fully self-contained.
  • Fixed a "Could not create the Kiosk Song Database" error on macOS after scanning your library.
  • Fixed password fields showing their contents as plain text instead of dots across the settings panels — including OBS and SongShop.
  • The license import / registration window now always opens on top, so it can no longer get stuck behind the main window.
  • Karaoke Maker — added an optional "Allow CPU encoding" fallback, with clear plain-English messages when the GPU encoder is busy.
  • New: QUP now checks for updates and shows a "New Version" notification when one is available.

QUP Karaoke Engine — v2.1.0

Released July 21, 2026 · Previous version: 2.0.55

This is a big one. QUP now runs natively on Linux, ships signed and notarized installers on every platform, and adds music video backgrounds behind your CDG lyrics. Full details below.

🐧 Linux support (new)

QUP now runs natively on Linux in three flavors:

  • AppImage — single file, double-click to run, no install required. Self-installs a desktop and applications-menu shortcut on first launch.
  • .deb — native Debian/Ubuntu package. Installs to /opt and adds a menu entry.
  • Portable zip — bring-your-own Java 21, for the widest range of distributions.

All three include the native audio engines built for Linux — SoundTouch key change, ysfx graphic EQ, and PortAudio device I/O. They're built against an older glibc so they run on essentially any distribution from 2022 onward (Ubuntu 22.04+, Debian 12+, Fedora 35+, RHEL/Rocky 9+).

Verified end to end: real karaoke playback (audio, CDG lyrics, key change, and EQ), filler MP4 video, and music-video backgrounds all working on Linux.

🔏 Signed & notarized installers

No more scary download warnings.

  • Windows — the installer is now signed with Azure Trusted Signing (Authenticode, timestamped), so you'll see far fewer SmartScreen warnings.
  • macOS — full macOS support arrives this release with a signed, Apple-notarized, and stapled DMG that passes Gatekeeper cleanly (just drag to Applications). The app bundles its native audio engines, and a series of macOS-specific fixes landed: a startup crash on read-only install directories, an invisible maximized window on the second launch, the kiosk HTTPS keystore path, config persistence, and a self-contained yt-dlp.

🎬 Music video backgrounds (new)

Play music videos behind your CDG lyrics. QUP automatically downloads the matching video (video-only, with the artist included in the search), prefetches your entire upcoming queue, and starts the background mid-song the moment its download lands. The video is composited behind the lyrics with the CDG on top, and it's performance-tuned to avoid per-frame allocation.

🎵 Audio & A/V sync

  • Video karaoke / MP4 — audio is now the master clock, fixing audio/video drift.
  • CDG lyrics are slaved to the audio clock in absolute terms (off the UI thread) with output-buffer latency compensation, so lyrics stay locked to the music.
  • CDG timing offset is now deterministic at startup and persists across restarts.
  • Seek is reliable and immediate on both the karaoke and filler players — fixed backward-seek jumping to the next song, playhead jumps, and tempo-shift position errors.
  • ASIO — karaoke and filler are now summed onto a single shared mains bus/pair for clean pro-audio routing.
  • Crash fix — skipping a song could crash the app due to a native heap corruption during PortAudio teardown. Fixed.
  • The native graphic EQ (ysfx/JSFX) is now active in the packaged builds.
  • Removed the old LibVLC/vlcj video backend; JavaCV/FFmpeg is now the single video path.

🪟 Windowing & docking (Winamp-style)

  • Per-window controls (quit, hide, shade) and a system-tray presence.
  • Dock and undock all three sections together (all-or-nothing), with z-order and focus fixes — no more flicker, the focused window stays on top, and the whole workspace can go fully undocked and hide the main frame.
  • Single-instance guard — only one copy of QUP runs at a time.
  • The app and taskbar icon is now the QUP brand (previously a generic icon), including on floating windows.
  • The exit confirmation dialog now reliably appears over the transport controls.

🎨 Config panels

Fixed the dark skin leaking into config panels. Tables, checkboxes, text fields, sliders, scroll bars, and combo boxes now render correctly, and text boxes look properly sunken.

🔌 Plugins

  • AutoFiller v2.0 — a from-scratch redesign.
  • Genre Tagger — now writes genre to MP3 ID3 tags (not just the database), reads artist/genre/album from filler ID3 on import, and adds a "Rescan filler ID3" backfill.
  • Metadata Editor (new) — right-click tag editing plus "Explore item".
  • File Management — added a Path column (right-aligned, leading-ellipsis so the containing folder stays visible; auto-grows to fill), "Remove from library" and "Delete from disk" right-click actions (also on the core libraries), and several new karaoke/CDG filename import and rename formats.
  • Internet Radio — plugin source added.
  • SongShop — configurable download folder.
  • Plugin Manager — enable and disable plugins (restart to apply).
  • AutoFiller and Genre Tagger are now surfaced as Media Library tabs, with M3U playlist support and a library right-click menu API.

👤 Singer management & library

  • The Singers Database now has a visible home under Singer Management, where the KJ can edit singers and adjust credit balances.
  • The Media Library tree has been reordered — Local Library first, then Singer Management.

📁 File dialogs

Native OS open, save, and folder dialogs (via JavaFX) now replace the old Java choosers.

☁️ Cloud

Now-singing info is emitted in the cloud poll, and PHOTO downloads resolve the configured cloud host.


This release covers 127 commits from April 25 to July 21, 2026.

Note: v2.0.54 was tagged but never released — the build failed at compile time due to an ambiguous-overload bug in the new file chooser API. v2.0.55 is the working release with the native file dialogs.

v2.0.55

Added

  • Native file and folder pickers across the entire app. The Add Folder, Add Files, Browse, Save, and Import dialogs now use the platform's native file picker — IFileDialog on Windows 10/11, NSOpenPanel on macOS, GtkFileChooserNative on Linux. On Windows you get the full File Explorer–style picker with the This PC sidebar, address bar with breadcrumbs, recent folders, pinned locations, and OS theme support (light/dark mode follows your Windows setting automatically).

Changed

  • Plugin SDK: file chooser API replaced with action-oriented methods (openFile, openFolder, openFiles, saveFile) that return the selected file directly. Plugin authors no longer configure a chooser before showing it.
  • Database singer-list import simplified to use a CSV-only filter (the previous mixed files/directories mode was vestigial; the call site only ever consumes CSVs).

Removed

  • Internal cpanel theming sweep for file chooser widgets — no longer needed now that file dialogs are rendered by the OS.

v2.0.53

Changed

  • File chooser theming for plugins now flows through the plugin SDK (PluginContext) rather than direct internal references. Genre Tagger, File Management, and Karaoke Maker plugins migrated to the SDK factory methods. Lays groundwork for future picker improvements without touching plugin code.

v2.0.52

Fixed

  • File chooser dialogs no longer have dark Folder Name fields or Files of Type combo boxes. Both widgets now render with white backgrounds and black text, matching the rest of the file picker. Affects the Media → Add Folder, Database → Browse, Music Video → Cache directory, and License chooser dialogs.

v2.0.51

Fixed

  • Number spinners across all configuration panes now render with white backgrounds and black numbers instead of solid black rectangles. Affected widgets included Auto-pause threshold (Kiosk Security), Max cache MB (Music Video), Intro duration (OBS Recording), Min queue depth and No-repeat window (AutoFiller), height-weight spinners (Skin & Layout), and the Simulation engine spinners.
  • Scroller's editable font combo box now displays the currently selected font name in black on white — previously the selection box was unreadable.
  • Configuration table column headers (Media Library Folders "Folder" / "Filler" headings) now display in black text instead of blue.
  • Empty tables (Kiosk Security pattern filter table) no longer fill with dark color when there are no rows.
  • Spinner up/down arrow buttons render consistently as flat-style buttons matching the rest of the cpanel.

v2.0.50

Added

  • Flat WACUP-style arrow buttons for combo box dropdowns and spinner up/down controls. Matches the existing flat-button styling for regular cpanel buttons.

v2.0.49

Fixed

  • Cpanel tables, lists, and trees now have white backgrounds (previously appeared as dark holes when empty — most visible in the Bribe singer list and Kiosk Security pattern table).
  • Non-editable combo box dropdowns display items in black-on-white rather than dark colors. Affects Output settings, Kiosk Security drop-downs, and Scroller selection menus.
  • Spinner inner text fields correctly render with white backgrounds.

v2.0.48

Added

  • Custom flat-button rendering for cpanel buttons. Buttons now have a raised bevel with hover and pressed states, matching the WACUP visual style.

v2.0.47

Fixed

  • Cpanel text labels, buttons, and checkboxes no longer render in blue on light backgrounds — foreground text is now correctly black throughout the configuration panel.
  • Text input fields, spinners, and combo boxes have white backgrounds across all cpanel panes (some plugin config panes were rendering dark).

v2.0.46

Fixed

  • Plugin configuration panels (AutoFiller, Music Video Background, OBS Recording, Karaoke Maker, Genre Tagger, File Management, SongShop) and the Simulation pane now have consistent light backgrounds matching the rest of the cpanel. Previously these panes inherited the global dark theme.

v2.0.45

Internal

  • Diagnostic release. No user-visible changes.

v2.0.44

Fixed

  • Restored proper rendering of cpanel controls after the v2.0.43 theming change. Buttons now display their raised bevels, dropdowns show their arrows, and text fields have visible borders.

v2.0.43

Changed

  • Cpanel light-theme implementation refactored to use a centralized override table rather than per-component color setters. More consistent and predictable theming behavior across all panes.

v2.0.42

Added

  • Plugin panes that lazily construct widgets (e.g. when an "Enable" button is first clicked) now get themed automatically when new widgets appear.
  • NativeFileChooser.createFolderChooser convenience method (pre-configures folder-selection mode with drag-and-drop enabled).

Fixed

  • File chooser dialogs maintain the cpanel light theme more reliably when reopened.

v2.0.41 — Wait Time clock starts fresh when your song is up next

Fixed

  • Wait Time now resets when a singer's next song becomes "up next." Previously, if you had two songs queued and your first song was playing, your second song's wait clock was already counting — so the moment your first song finished, your second song would show something like "10 minutes" of wait time. That was misleading. Now the clock starts at zero the moment a song actually becomes the singer's next-up turn.

v2.0.40 — Fixed "Est Time: NOW" on second singer

Fixed

  • The singer in position 2 of the rotation no longer incorrectly shows "NOW" as their estimated time. Only the currently-playing singer should display "NOW"; everyone else should show how long until they're up. The calculation now accounts for remaining time on the currently-playing song. The same fix applies to the scrolling display.

v2.0.39 — Polish on the new mobile kiosk

Fixed

  • Your Submissions list now displays in rotation order. Your next song to be sung appears at the top, not the most recently submitted one. Played songs and errors fall to the bottom.
  • Credit balance updates correctly on the mobile kiosk. Previously the kiosk showed "$0.00" for credits even after the KJ added credits via Singer Database → Edit Singer. Now changes propagate within a second or two.
  • Bribe submission errors are clearer. Instead of a generic "required" message, the kiosk now tells you exactly what's wrong.

Changed

  • Bribe cost table now only shows singers you can actually skip past. Previously every singer in rotation was listed, including ones at or after your own position (which always cost $0 because there's nothing to skip). Now the list shows only actionable move-up targets.

v2.0.38 — Live kiosk state; view the full playlist; Change Song fixed

Added

  • View Playlist on mobile. A new button on the patron kiosk opens the full current rotation — every singer, every song, in order. Your own entries are highlighted. See where you are, see who's ahead of you, see the big picture. Same data the KJ screen shows.
  • Rotation position indicator. The kiosk now shows "You're #3 in line, 2 songs ahead" so patrons know where they stand at a glance.
  • Live state refresh. The kiosk refreshes its view every 10 seconds. Songs that have already been sung disappear from "Your Submissions." Credit balances update. Bribe availability updates.

Fixed

  • Change Song now actually works. The command was being silently rejected by the engine due to a name mismatch. It's been recognized now. If you click "Change Song" on a queued submission and pick a different song, the swap goes through and you see "Done."
  • Played songs no longer linger on the patron's kiosk. If you sang your song and it finished, your kiosk updates within 10 seconds to show it as played, and stops offering Change Song / Bribe buttons on it.

v2.0.37 — Change Song and Bribes wired up (with caveats addressed in v2.0.38)

Added

  • Change Song button on patron kiosk. Patrons can now swap a queued song for a different one — as long as their original submission hasn't been sung yet. Uses the same "verify it reached QUP" feedback flow as regular song submission.
  • Bribe system on patron kiosk. Bribe-enabled venues now show a Bribe button next to each of a patron's queued songs. Tapping it shows who they can move ahead of and what it costs. Patrons select a target, confirm the cost, and the bribe is processed by the engine — which deducts credits, validates the cost, and reshuffles the rotation. KJs credit singer accounts manually via Singer Database → Edit Singer (no payment processing on the kiosk; cash-in-venue model).
  • Bribe button auto-hides when bribes are disabled in the venue's Bribe configuration.

Known issues addressed in later releases

  • v2.0.38 fixed the QUEUE_REPLACE switch-case gap that prevented Change Song from actually working end-to-end.
  • v2.0.39 fixed credit balance display, submission ordering, and bribe cost-table filtering.

v2.0.36 — Finally: patrons' songs actually reach the queue (and the kiosk tells the truth)

This release fixed three converging bugs that had caused silent song drops. After this, first-session fresh installs work end to end.

Fixed

  • The "double CloudSync" race. On registered-install reboots, two cloud-sync workers were running simultaneously on the same install. One had the song-queue engine wired up; the other didn't. Whichever fetched a patron's submission first processed it — so submissions failed or succeeded at random. Now there's exactly one sync worker per install.
  • Silent song drops. As a consequence of the above, roughly 5 out of 8 song submissions were silently failing with "Enqueue engine not ready" while the patron's phone happily showed "Submitted!" Now that the race is fixed, and combined with the ack-verify flow below, submissions are reliable.
  • Catalog sync on library changes. If you registered your cloud before adding your media folder to QUP, the server-side song catalog was empty and the kiosk found nothing when patrons searched. Now, whenever QUP finishes scanning a library folder, the cloud catalog refreshes automatically — no restart required.

Added

  • Submission ack-verify. When a patron submits a song, the mobile kiosk shows "Sending..." then "Verifying with host..." then — only after QUP actually confirms the song was queued — "In queue." If QUP rejects the submission, the kiosk shows "Couldn't queue" with the reason. If QUP doesn't respond within 60 seconds, the kiosk shows "Still trying... if this keeps happening, ask the KJ." No more silent success; no more patrons wondering why their song never came up.

v2.0.35 — Auto-initialize kiosk on registration

Fixed

  • QR code now appears automatically within 60 seconds of completing cloud registration. Previously, even with everything else working, the kiosk token had to be manually minted by clicking "Initialize kiosk now" in the Kiosk Security settings. That step is now automatic when a venue verifies its email.
  • Rate-limit friendliness for the nonce-fetch calls that precede every signed request. These are now exempt from the per-IP and per-install general buckets, so high-frequency polling no longer starves other cloud operations.

v2.0.34 — Fresh-install QR rendering

Fixed

  • Cloud polling now self-starts on a fresh install. Previously, registering cloud on a brand-new install left the polling scheduler unstarted, which meant the venue's status never flipped to "active" internally, which meant the QR code URL never resolved. Fixed.
  • Poll and sync rate-limit ceilings doubled. The original values were sized assuming one counter increment per request; in practice each request produced two increments, so the ceiling tripped during normal operation. Now set correctly.

Changed

  • The old /sing/ patron URL is deprecated. If a patron scans an old-era QR code linking to /sing/something, they'll now see a friendly page directing them to scan the current QR on the karaoke screen, instead of getting a confusing error. The supported patron flow is /k/<token> which resolves to a cookie-persistent /s/<session> URL.

v2.0.33 — Secured cloud auth migration

Changed

  • Cloud authentication fully migrated to signed requests. Previously, some cloud endpoints used a shared secret model that was prone to subtle desync bugs (secret generated on the client, secret generated separately on the server, the two never exchanged — silent auth failures). All runtime cloud endpoints now use per-install cryptographic signing. Authentication desync is structurally eliminated.

Breaking change

  • Clients on v2.0.32 and earlier will need to upgrade to v2.0.33 to continue using cloud features. (Fresh installs on pre-v2.0.33 were already broken in practice due to the desync issue this release fixed.)

v2.0.32 — Multiple stability fixes

Fixed

  • Cloud sync now starts immediately after registration without requiring a QUP restart. Previously, completing cloud registration correctly updated the cloud settings, but the actual sync worker wasn't started until the next app launch.
  • No more "split-brain venues." If cloud registration was already complete, the app no longer attempts to re-register on restart, which was previously creating duplicate venue records server-side.
  • Venue name length check. Venues named with fewer than 3 characters are now accepted (previously the registration form silently rejected them).
  • Silent cloud errors now surface. Sync failures that used to go to an invisible error stream now appear in the log with full stack traces, so operators can diagnose issues.

Added

  • Session ban / unban from Singer Management. The Singer Management table now lets a KJ ban a specific kiosk session (e.g., a problem patron) and reverse the ban later.
  • Catalog sync progress indicator. The Media Library window shows an indicator strip during a cloud catalog sync, so operators can see the operation is in progress.

v2.0.31 — Signed request rate limit

Fixed

  • Singer Management panel no longer polls continuously when hidden. It used to make signed cloud requests every 10 seconds forever, whether the panel was visible or not — about 360 requests per hour. Now it polls only when the panel is showing, and the per-install hour cap was raised to accommodate bursts.

v2.0.30 — Fresh-install UI defaults fixed

Fixed

  • Checkbox defaults on first launch now match the intended values. A long-standing bug meant that even though many settings had sensible default values in code, they were silently overwritten to "unchecked" on fresh installs because the save-preferences code read from the UI state before the UI was fully initialized. The Karaoke settings panel now sets each checkbox explicitly after creation, so defaults persist correctly. Affected checkboxes include the proportional scroller toggle and eleven others.

v2.0.29 — Cloud settings persistence on registration

Fixed

  • Cloud is now enabled automatically when registration is verified. Previously, a successful registration verification didn't flip the "Connect to QUP Cloud" checkbox on or save the updated state, so restarting the app meant re-enabling cloud manually.
  • Production cloud configuration is now bundled with release builds. Shipped zips contain the correct live-production cloud settings out of the box.

v2.0.28 — Baseline release

The starting point for this release series. All subsequent changes above build on this.

Notable features present as of v2.0.28 (not new — included here for context)

  • Crossfades between the filler playlist and karaoke songs with configurable duration.
  • Async song-length scanning and database v3 migration with background backfill of missing lengths.
  • Proportional CDG rendering that scales cleanly at any window size.
  • Per-role equalizer namespacing (main output vs. phones output).
  • Click-to-position on the global playback slider.
  • QR float overlay on the CDG window.
  • GenreTagger plugin (freedb/MusicBrainz metadata tagging).
  • AutoFiller plugin with Enable/Disable toggle and manual "Fill Now" action.

QUP Karaoke Engine v2.0.27

The biggest UI refactor since 2.0 — the main window is no longer a fixed layout. Each major section can float, dock, and snap freely. Plus a ton of polish throughout.

Dockable windows

The Player, Media Library, and Playlist are now independent panes. Dock them in the main window or pop them out to float wherever you want. Drag title bars to move, and floaters snap to each other at the edges when dragged close. Clicking any one floater brings the whole group to the foreground so nothing gets buried behind another app. Each window can be set "Always on Top" independently, and layouts persist between sessions.

Media Library redesign

A left-side navigation tree now covers Rotation, Local Library (Karaoke + Filler), and Plugins. Each library has its own "Add to Library" button with Add Folder / Add File(s) — fast imports no longer require a detour through Preferences. When docked, a draggable divider between Media Library and Playlist lets you size each one to taste.

Filler playlist overhaul

The filler queue finally behaves like it should — currently-playing is pinned at the top, tracks disappear after they finish, and the NOW indicator actually points at what's playing. AutoFiller keeps topping things up whenever the queue runs low.

Right-click everywhere

Right-click almost any title bar, list view, or empty chrome area to get a shared menu with Dock/Undock, Always on Top, AutoFiller, Genre Tagger, Send Message, New Session, Preferences, Singer Database, and Exit. No more hunting for where a feature lives.

Alternating row colors

Every list view (karaoke, filler, playlist, rotation, plus every plugin table) now renders with alternating row colors for easier scanning. Right-click any list to toggle it — the setting is global and persists between runs.

Native file browsers

Open/Save dialogs now render with the native Windows look instead of QUP's dark theme. Feels much more at home when navigating your file system.

Notable fixes

  • Filler Genre column is actually visible and resizable now (was being hidden by a column-index bug)
  • Corner resize on floating windows works reliably on the first click, every time
  • Right-click menus no longer flash and disappear when opened on an unfocused floater
  • Ctrl-A in list views selects the rows you're looking at, not the navigation tree
  • Transport controls stay properly centered inside the Player window at any width
  • Filler library alternating colors match the rest of the UI

QUP Karaoke Engine v2.0.26

New Features

  • Up Next Scroller config panel — Full settings pane for the CDG window's upcoming-singers overlay. Configurable scroll style (horizontal/vertical), animation speed, custom font and size, color mode, transparent overlay option, scroll position (top/bottom), and Cloud QR code display with position and color pickers.
  • Skinned title bar — Custom-drawn window title bar that follows the active skin theme.
  • MMCSS audio thread priority — Audio playback threads now register with Windows Multimedia Class Scheduler for lower latency and fewer glitches during heavy CPU load.

Bug Fixes

  • Fixed right-click song queueing — "Enqueue Song" from the singer submenu was silently failing. Songs now queue correctly when selected from the right-click menu.
  • Fixed cloud registration — Registration was hitting a retired server endpoint, causing "Error communicating with server" on signup. Now connects to the correct API.
  • Fixed folder removal freeze — Removing a large media folder (thousands of files) no longer locks up the UI. Deletions now run in the background.
  • Fixed connection leaks — Cloud sync and HTTP calls were accumulating open connections over long sessions. Cleaned up for better long-run stability.
  • Fixed exit confirmation dialog — Properly sized and non-resizable.
  • Reverted FlatLaf experiment — Restored Nimbus via QUPDarkLaf. EQ sliders back to 3D shaded knobs, all 10 bands visible.

Security Improvements

  • Removed legacy SSL bypass that weakened encrypted connections
  • Removed hardcoded credentials from source
  • Hardened HTTP error handling to prevent silent failures

Under the Hood

  • ~30 resource leaks patched for improved stability during extended shows
  • Background processing improvements to keep the UI responsive during database operations

v2.0.25 — Architecture & Reliability

The filelist panel — the main screen where you browse and search your song library — was rebuilt from the ground up. What was a single 2,700-line file is now five focused modules handling table display, search, file importing, column preferences, and right-click actions separately. This makes the codebase easier to maintain and sets us up for faster feature work going forward.

Other improvements in this release:

  • Right-click "Enqueue Song" submenu now shows all singers currently in rotation for one-click queuing, with a "More options..." fallback for the full dialog
  • Bad file marking and unmarking available directly from the right-click menu based on current file status
  • Multi-select support for bulk song deletion from the database
  • Filler table gets its own right-click context menu with enqueue and folder browsing

v2.0.24 — Security Hardening

A comprehensive security and stability pass touching 21 areas across the engine. The highlights:

Input validation — A new centralized input validator now screens all data coming in from the kiosk web interface. Singer names, hashes, pin codes, mobile numbers, and general text fields are all checked for length limits, allowed character sets, and common injection patterns before they reach the database.

Safer data handling — Replaced the legacy XML parser with Gson for configuration serialization. Thread-safe collections now protect shared data structures that are accessed from multiple threads simultaneously. Several places where the application could abruptly terminate have been softened to graceful error handling instead.

General hardening — Path traversal protections, stricter input sanitization on HTTP parameters, and defensive null checks across the kiosk communication layer.

v2.0.23 — Performance & Polish

This release focused on fixing rough edges reported from live venue use:

  • Media database loading performance improved — library scanning is noticeably faster on large collections
  • Filler music crossfade behavior fixed — transitions between filler tracks and karaoke songs now blend smoothly without volume jumps
  • Build size reduced by removing duplicate and unused libraries from the distribution
  • First-run experience fixed — eliminated a double-restart that occurred on fresh installations
  • Column layout preferences now load with proper guards, preventing crashes when saved preferences reference columns that no longer exist

QUP Karaoke Engine v2.0.23 Release Notes

Genre Tagger Plugin

Brand new plugin that tags your entire song library with genre metadata from the freedb database — over 1 million artists catalogued.

  • One-click genre tagging — download the pre-built genre database from qupkaraoke.com (~45 MB), then click Tag Library. Genres appear in your media library instantly, no restart needed.
  • freedb import — for advanced users, import the full freedb dump directly from archive.org (~850 MB). QUP stream-parses the archive without extracting it to disk.
  • MusicBrainz fallback — songs that freedb doesn't recognize get queued for MusicBrainz lookup. Start it when you're idle — it runs at 1 query per second in the background. Pause and resume anytime.
  • Persistent LED indicators — the Genre Tagger window shows green LEDs with dates for each completed step: IMPORTED, TAGGED, and BRAINZED. State persists between sessions.
  • Loading screen — the Genre Tagger opens instantly with rotating fun messages while the database loads in the background. No UI freeze.
  • Browse for local file — already downloaded the freedb dump? Point QUP at the file instead of downloading again.

AutoFiller Plugin

New plugin that automatically keeps your filler music playing between karaoke singers. No more dead air.

  • Enable with one click from the skinned popup window — right-click any empty area and select AutoFiller
  • Shuffle mode — plays through your entire filler library before repeating any track
  • Repeat avoidance — set a time window so the same song doesn't come back too soon
  • Genre filter — limit auto-fill to a specific genre using ID3 tag data from your MP3 filler files
  • Fill Now button — prime your filler queue before the show starts
  • Live status — shows queue depth and available track count in real time

Genre Column in Media Library

  • Genre column added to both the karaoke and filler file lists
  • Artist and Genre columns added to the filler table
  • Genre data populates automatically after running the Genre Tagger

Right-Click Context Menu

  • Right-click on empty areas of the main window for quick access to AutoFiller, Genre Tagger, Control Panel, Singer Database, and About
  • Menu is dynamic — only shows plugins that are actually loaded

Media Database Performance

  • Song scanning is dramatically faster — indexed lookups replace full table scans, batch transactions replace per-song commits
  • Database bloat fixed — automatic compaction after scans prevents the database from growing to multiple gigabytes over time
  • Clean shutdown — database is properly checkpointed and closed on exit

Plugin API Expansion

For plugin developers building on QUP:

  • New FillerPlugin interface for hooking into the filler playback system
  • New SkinnedDialog utility for creating themed popup windows that match the active QUP skin
  • New genre tagging methods: updateSongGenre(), updateSongGenres(), updateFillerGenre()
  • New refreshMediaLibrary() method to update the file list UI without a restart
  • New getPluginDatabase() for plugin-private SQLite storage
  • SongInfo expanded with genre and album fields

Bug Fixes

  • Fixed: Application required two restarts on first launch — now starts fully on the first run
  • Fixed: Upgrading with new columns no longer crashes on startup — column count mismatches are handled gracefully
  • Fixed: Filler music going silent on manual crossfade song transitions

- Fixed: Build size reduced from ~245 MB to ~90 MB by excluding unnecessary platform-specific native libraries

v2.0.22 — April 13, 2026

Crossfade & Distribution Fixes

  • Fixed filler music going silent on song transitions when crossfade is set to Manual mode
  • Fixed crossfade gains resetting on each new karaoke song start in Manual mode
  • Fixed crossfade incorrectly triggering during seeks in Manual mode
  • Filler volume slider now correctly applied on all playback paths
  • Distribution size reduced from ~245 MB to ~90 MB by removing unused libraries (OpenCV, Tesseract, sensor drivers, and non-target platform binaries were being bundled unnecessarily)

v2.0.21 — April 12, 2026

KaraokeMaker Local Files & Fast Restart

  • KaraokeMaker now supports local MP3 and MP4 files — use the Browse button instead of requiring a YouTube URL
  • Accurate duration detection using FFmpeg probe replaces the old bitrate-based estimation
  • Fast song restart — video mode seeks to the beginning instead of fully reloading, audio mode caches duration to skip the rescan
  • Stop → Back now immediately restarts the current song without needing another Play click
  • Playlist wait times show "PENDING" for a singer's queued songs that aren't up next

v2.0.20 — April 11, 2026

File Management Plugin & Plugin API Improvements

  • New FileManagement plugin — batch rename and re-import songs with support for 6 naming formats (DISC/TRACK - ARTIST - TITLE, ARTIST - TITLE, and more)
  • Right-click selected songs to re-import with a different naming convention or physically rename and reorganize files on disk into a clean folder structure
  • Karaoke and Filler sub-tabs with multi-select, sortable columns, and a configurable output folder for file conversions
  • Progress bar for batch operations across hundreds of files
  • Plugin API extended with SongInfo — plugins can now query and inspect the full song library
  • New buildPluginApi Gradle task automatically rebuilds the plugin API JAR when interfaces change
  • Five plugins now ship with QUP: SongShop, Music Video Backgrounds, OBS Recording, KaraokeMaker, and FileManagement

v2.0.19 — April 11, 2026

KaraokeMaker v2 & GPU Acceleration

  • Complete rewrite of the KaraokeMaker plugin with a job queue system — queue multiple songs while one is processing
  • Jobs persist between sessions so you can close and reopen without losing your queue
  • Per-song output settings: brightness, duet mode, frequency slider, and visual effects are now set per song, not globally
  • Right-click menu on queued jobs: Re-Start, Re-Sub (redo transcription only), Re-View, Import to library, Delete
  • GPU acceleration throughout: NVIDIA NVENC for encoding, CUDA for vocal separation (Demucs), and CUDA for lyric transcription (Whisper) — falls back to CPU automatically if no NVIDIA GPU detected
  • NVIDIA CUVID hardware video decoding for music video backgrounds and karaoke video playback
  • Language support for 65 languages with auto-detection and manual override
  • Graceful handling of songs where lyrics can't be transcribed — produces instrumental karaoke instead of failing
  • Music Video plugin now supports browser cookie import for authenticated YouTube downloads
  • Music Video plugin strips track numbers from search queries for cleaner YouTube results

v2.0.18 — April 10, 2026

Session Recording & Media Library Improvements

  • Session Recording — every song queued, dequeued, moved, or removed during a live show is logged automatically
  • Session Playback — replay saved session logs through the real rotation engine for debugging or training
  • Per-folder media scanning — each media library folder now has its own Scan and Remove buttons with an inline progress bar
  • Rescan All button replaces the old "check boxes then rescan" workflow
  • Database settings panel cleaned up with a simpler vertical layout
  • Fixed a rotation bug where singers could get scheduled back-to-back at the start of a show

v2.0.17 — April 9, 2026

Portable Distribution

  • Switched from native installers to a portable zip distribution — just unzip and run, no installation required
  • Per-platform JavaFX bundling for Windows, macOS, and Linux
  • Gradle now auto-compiles all plugins as part of the standard build

v2.0.15 — April 5, 2026

Plugin Architecture

  • New plugin system — third-party developers can extend QUP with custom song stores, media tabs, recording integrations, and more
  • Four shipping plugins:
    • SongShop — browse and purchase songs from the Party Tyme catalog directly inside QUP
    • Music Video Backgrounds — automatically downloads YouTube music videos as CDG backgrounds via yt-dlp
    • OBS Recording — controls OBS Studio via WebSocket to auto-record each karaoke performance with scene switching and lower thirds
    • KaraokeMaker — AI-powered karaoke track creation: downloads a song, separates vocals from instrumentals, transcribes lyrics, and builds a karaoke file with timed lyric sweeps
  • Playlist right-click menu — Exchange Song, Replace Singer, Lock/Unlock in rotation, Show Singer History, Dequeue
  • Video drag-and-drop support for MP4, MKV, and AVI files
  • Plugin developer guide included for third-party development

v2.0.14 — April 5, 2026

Bug Fixes & Stability

  • Fixed music video backgrounds looping indefinitely after the last karaoke song ends
  • Improved rotation engine stability in headless/CI environments

v2.0.13 — April 4, 2026

Rotation Engine Overhaul, Simulation & Cloud Queuing

  • Deep analysis and alignment of the rotation algorithm with the original ml_akdj C++ engine
  • Graduated new singer preference — replaces the old on/off checkbox with a 0–100 slider that controls how aggressively new walk-in singers jump the queue
  • Max wait time lock now correctly protects only a singer's next song, not all their queued songs — matches the original algorithm's intended behavior
  • Same-rotation tiebreaker corrected to use actual singer position in the rotation list
  • Full simulation engine — run fake shows with randomized singers, songs, bribes, and KJ moves to test rotation fairness before going live
  • Simulation displays a purple "SIMULATION" banner on the kcombo web interface with a simulated venue clock
  • Rotation invariant tests added to the CI pipeline
  • Bribe cost calculation fixed for songs queued via cloud and kiosk
  • Double-click to edit singer name
  • "Unmark Bad File" option added to the right-click context menu

Cloud Song Queuing

  • Singers queue songs from their phones — scan a QR code displayed on the kcombo screen and they're in
  • Mobile-first web interface with search-as-you-type across the venue's entire song library — even libraries with 120,000+ songs search instantly, with phones only downloading a handful of results at a time
  • QR code rotates daily to confirm the singer is physically present at the venue
  • One account per device per venue prevents duplicate signups from the same phone
  • Returning singers are recognized automatically when they scan in on a future night
  • Singer selfie photo upload from phone camera, displayed on the kcombo screen above the current singer
  • Song change and replace — singers can swap a queued song for a different one without losing their spot
  • "You're next!" notifications — in-app banner and vibration alert when a singer reaches position 2 or 1 in the queue
  • No port forwarding or special network setup required — works behind any firewall
  • Live queue view — singers see their position and estimated wait time from their phone

v2.0.0 — March 29, 2026

Major Release

  • Application now starts immediately — no blocking dialogs on launch
  • JavaFX video playback reliability improved with an alternating MediaPlayer strategy that avoids a known GStreamer pipeline degradation bug
  • Import Media button added to the file list for quick song imports
  • Venue name is now a simple text field instead of a button
  • Output defaults corrected: JavaFX video, PortAudio audio, WASAPI driver on Windows
  • Build system modernized with dynamic file scanning and updated GitLab CI for Windows, macOS (Apple Silicon), and Linux builds
  • Version format standardized to three-part numbering (e.g., 2.0.0)

v1.1.51 — March 22, 2026

Skin System, Crossfade Engine & UI Overhaul

  • 14 bundled skins themed after classic hi-fi receivers — EAD Ovation, Technics SC-CH900, Kenwood KR V-106, and more
  • Live skin switching — change the look of the entire application without restarting
  • All UI components (VFD timers, scrolling displays, VU meters, waveforms, EQ sliders, transport buttons) are fully skinnable
  • Vector-drawn transport buttons replace old bitmap buttons — scale cleanly at any size
  • Filler music EQ — filler now has its own independent 10-band equalizer (separate from karaoke EQ)
  • CUT slider and VU meter — horizontal CUT slider for filler volume with a redesigned VU meter bar
  • Smart crossfade engine with three modes:
    • Silence — auto-fades filler based on silence detection in the karaoke audio
    • No Karaoke — filler plays only when no karaoke song is active
    • Manual — direct slider control
  • Crossfade mode persists between sessions
  • Config panel redesign — tabbed interface replaced with a tree-navigation panel (always light themed for readability)
  • Alternating row colors in all list views, configurable per skin
  • EQ curve visualizer with smooth spline rendering
  • EQ memory preset buttons redesigned with LED indicator lights

v1.1.0-b48 — Pre-March 2026

Foundation (Java 21 Port)

  • Filler music system — dedicated filler music player with its own playlist, crossfading between karaoke and filler streams
  • Filler checkbox per media folder — designate folders as filler music (excluded from kiosk and song search)
  • Internet radio URL support for filler music
  • Filler songs appear on the kcombo web interface as "Filler" with no rotation logic applied
  • VU meter panel — real-time stereo VU meter
  • Smart crossfade — monitors karaoke audio levels and automatically fades filler at natural silence points
  • Kcombo web interface — live queue display for the audience showing current singer, upcoming songs, rotation order, and queue status
  • Kiosk touchscreen keyboard improvements
  • Bribe visual indicator on kcombo — bribed songs show a tiled money GIF background
  • Cloud backend with venue registration, live playlist sync, singer photo uploads, and session heartbeat