v1.5.0 (Builds 145–157)
Live Show
- A waveform workbench you can spend a set in. The editor moves into a window of its own, with the lineup down one side so marking is a pass down the queue instead of a trip back to the console per song. Marks drop at the play bar and drag from there, Snap lands them on the nearest hit in the music, the beat grid draws underneath, and the whole keyboard is listed a keystroke away. Opening a song used to take about ten seconds; it now takes about six tenths of one.
- The app finds the intro by listening for a tempo. Not by hunting for drums and not by trimming silence — both were wrong on songs that open on a voice or a guitar. It looks ahead for the moment a beat becomes discernible, which is how a DJ described the decision when marking twelve songs by hand. Seven of those twelve now land within a second, five of them within a twentieth of one.
- The outro is the first beat of the last bar. The old rule reached forward for a phrase end and could sail into eight seconds of silence, or into twenty seconds of footsteps and car doors after the music stops. Three different endings — a fade, a ring-out, and sound effects over nothing — now get three different tests, and the show plays the final bar out rather than cutting on the mark itself.
- Your own marks win. If you sat with the waveform and placed a cue by hand, the show uses it ahead of anything it worked out on its own, and the readout says which of the three sources it took. A mark the app proposed can never be mistaken for one you placed.
- A force-played song fades in from the standby player. The room used to watch the current song stop dead, a bare page paint, and the picture resize into place. Now the new song reaches its start on the player nobody is looking at and only then dissolves across — capped at a second and a half, because a press meaning "this one, now" answered with a ten-second dissolve reads as a button that didn't work. If the load fails, the song that was playing keeps playing.
- Cutting to trivia, the photo wall or the Outro dissolves straight into it. They arrive as a board of their own, so raising a covering board first was ceremony over nothing — the show was cutting to the info board in order to cut to the trivia board. The video now fades across the three seconds before it ends and the destination comes up in the same window.
- A playhead under the meters, and a master fader for the room. The scrubber is derived from the clock every queue type already keeps, so trivia, the raffle, the bookends and intermission all got one; songs and the photo wall can be dragged. The fader's speaker is a mute you can hit blind mid-song, and unmuting returns to the level you were at.
- The Intro and Outro are ordinary Messages now. Same board, same editor, same list of saved arrangements as any other Message — which is what fixes customising an Intro board and watching the row never change. The bookend boards also learned words: an opening board whose job is to greet a room walking in no longer says "One moment…", and the Intro, Outro and general-purpose arrangements each answer what that moment actually needs (a join code at the start, a tip jar and thanks at the end). A night has one Intro and one Outro, both pinned to their ends and unmovable.
- Message pauses, as many as you like. A queued pause that holds the room with your own text and an optional music bed until you press Next, each one with its own board and its own settings, dragged into the lineup by a grip like every other break type.
- Drive the queue from the keyboard. Click a row and it stays lit: arrows walk the selection, Command-arrows page, Space force-plays, Return previews, W opens the waveform, A files it in a playlist, Delete drops it. Every row action carries its key in the menu, and Command-slash lists them all.
- The console's Video tab splits into Karaoke and Music Videos. Two tabs over one lineup, with the segmented sub-switch under the strip gone. Tapping a lineup row now lands on the right tab instead of being silently dropped, and switching decks scrolls the selection into view.
- The show can name what's playing off your rig. For a song-requests set, it reads your DJ software's own history and — with your say-so — listens to the room, then reconciles the two into one now-playing answer that goes up on the board with cover art. When the track answers a guest's request, their name and face land on the board as it drops. Room listening disarms itself when the night ends rather than staying on for the next one, and it now has its own card instead of hiding inside the Serato section, since it's for the nights that aren't running Serato at all.
- Put your own art on every board. A background image with an opacity control, plus an image module you can drag and size like any other. Both travel with a saved arrangement, and a board with your art on it drops our watermark. Your library follows your account to a second Mac, and re-uploading the same picture costs nothing.
- The board editor's dropdowns open every time. They used to go dead after the first use. Now they're proper menus at the control itself, rather than a row of options along the bottom of the screen, and picking the option that's already selected does the thing again instead of nothing. Save, Save As and Apply to TV go busy then confirm on the button itself — a toast at the far end of a big display was easy to miss.
- Now Playing is a square. The cover fills the card with the text over it, so a board shows the artwork at a size a room can see. It sits beside the request feed rather than above it, so the feed keeps its full height.
- Every session starts with its bookends, and "Start a Test Party" is gone. One way to start a night. A saved party still live no longer refuses the new one — the launcher shows both answers side by side, so picking one ends the other.
- Trivia says it's running while it runs. The lineup card claimed a round had finished the moment it started, and said so for the whole round. It now names the question the room is on and offers only Cancel — the one thing that beat must not offer is "move on".
Party & Guests
- Nobody has to rule on a request any more. Approve and Decline are gone, and with them the verdict that got pushed to someone standing in the room. One Done button clears a row whatever you decided — played it, will play it later, won't play it. What a guest is told is that it arrived: "Sent ✓", and nothing further.
- The link for a party that hasn't started yet shows the whole party. It used to present as karaoke-only whatever you'd set up. Guests can now browse and stage from every lane you enabled, requests made before the night starts land in your feed, and your lineup and your guests' picks are finally visible to each other instead of meeting for the first time at go time.
- Shout-outs carry the sender's face. Built from the selfie a guest already gave, so retaking it updates the board too. Anonymous shout-outs stay anonymous, and a guest with a name but no photo gets their initial. Repeating the same shout-out is what's now limited, not how many different ones you can send.
- The guest app stops behaving like a web page. Double-tapping a song row no longer strands a guest at 2x with no way back, and a long-press no longer pops the copy bubble over the UI. Pasting a party code or an invite link still works exactly as before.
- Build a Party can read the flyer. Point it at the invitation the client already sent and it comes back with the brief, the date, the venue, the honourees and a board palette pulled from the flyer's own colours and re-grounded for a dark TV. Nothing is written until you tick it: every claim is separate, each says whether it was printed on the flyer, inferred from the picture or chosen by us, and one that conflicts with what you already typed shows the conflict instead of quietly overwriting it.
- Build a Party is a wizard, and it stops asking what you already said. One question at a time, with a karaoke on/off switch and a blocks-vs-intermix control. If your brief already names the occasion, the genres or the guest of honour, it skips those steps. For the night you can't describe, it can interview you instead — five questions, and the answer is a brief. Trivia now asks where the questions come from rather than whether trivia fits, because a round about the guest of honour is the client's to write.
- A song list seeded from who else the room would want to hear. Name a couple of artists and the planner widens them, cuts the result against the occasion, and drops the songs in as requests rather than as a lineup — including songs we don't stock, because a song you own on your own rig is still a song you can play.
- A party can have a board theme of its own. Beyond the 45 built-in themes, a palette built for that one night.
Search & Catalog
- More Like This got deeper and less repetitive. It reads the whole mix instead of the first ten — the head of a mix is mostly the seed's own artist, so a shallow read answered "more like this" with ten more by the same act. Now it caps at three per artist and spreads what's left, drops lyric videos in favour of the real thing, and holds the rest back for later rather than discarding it. The rotation and the pane you're browsing now agree on all of it.
- "Everything related to this one is already queued." That used to render identically to a song with no mix at all.
- A Playlists tab in Music Videos search. Which playlists already carry this artist or song — the question you're actually asking when you're building a set, and one the Songs and Artists tabs can't answer.
- The Charts screen runs on Apple's public charts feed. Same chart, no credentials, and the 100 charted playlists now come with their track lists instead of reading "0 songs". Chart search works on playlist names again.
- The artist's own upload wins. The duration check was calibrated against the audio cut, so it systematically rejected the official video of the same song for carrying an intro or being the long version. It now takes the artist's own channel first and keeps the tight check for acts whose video lives on a label channel.
- 22 genre shelves instead of 91. "Pop Rock", "Dance-pop", "Electropop" and "Synth-pop" are all the same shelf to someone standing in front of a TV, so everything else folds into a top-level genre one hop away.
- The Song Requests rail gains a Search tab. Browse the charts, filter to what's already in your library, and add straight to the feed.
- A resolve you've already paid for is free. The catalog now remembers which song a video answered and which words found it, so dropping the same playlist in twice, or looking up something another party already looked up, comes back from the database instead of another scrape. Measured: 44 tracks resolved in 46 milliseconds against 9.4 seconds for a single fresh lookup.
Interface
- Settings, Help, About and the rest are real sheets again. They were full-window covers as a workaround for a scrolling bug, and they now scroll properly, dismiss on a click outside, and open in about seven tenths of a second instead of taking five to fifteen. Sheets also land in the main window rather than in whichever window happened to win — with the Debug window open, Settings could open inside it, sized to a 360-point pane.
- The app always opens on the Main Queue. A tab is a place you are, not a preference you hold; launching into Saved Queues because that's where you last quit hid the thing you opened the app to see. Going live mid-show still leaves the pane where you had it.
- Re-tap a tab to rewind a deep browse. Themes, a collection, a playlist, an artist, then a hop to another artist used to be five presses of Back. The trail now comes apart in reverse in about a second.
- Add to a saved playlist from anywhere. Search rows, the karaoke lists, both queue panes and the Music Videos browser, naming the list at the moment of the add.
- The lineup holds still. Every row is the same height, so lifting a song onto the on-air card no longer re-flows the list; the rules span the pane instead of sitting inset; and Play, Preview and Remove moved into the row's menu, giving about 70 points per row back to the title.
- The on-air clock reads from across the booth, and the amber chip says "Music Video" rather than naming the lane by what it isn't.
- The artist page stops eating its own carousel. A square press shot made the hero as tall as the cover, pushing the "fans also sing" row off the bottom with the scrim behind it. Fixed in one place, so all three artist screens got it.
- The Raffle Start card is impossible to miss, and it carries you through Start to Spin instead of dropping the hold and sending you to another console.
Reliability
- The idle console stopped burning a sixth of a CPU core. One 34-by-92-point decoration in the corner was animating a glow, which forced a fresh blur every frame and made the whole console re-lay out with it — 16% of a core with a party live and nothing playing, and it kept running while the window was hidden behind another app. Settled cost is now about 1.3%. Four more animations of the same shape were found and pinned, including one that ran while you were live in front of a room.
- Build a Party stopped failing at 30 seconds. The proxy in front of the API cut the request off while the model behind it went on to answer fine 65 seconds in, and all you saw was "Couldn't build a plan for this party."
- Opening a song in the waveform editor no longer fails the first time. Two downloaders were racing for the same audio and deleting each other's work, which is why the second try always worked.
- Your library tracks changes all night. The watcher on it sensed the first edit of a session and then went silent for the rest of it.
- Future Parties opens more than once, and closing setup lands you on the party list rather than dumping you on the start screen with your reservation to find again.
- The first scrub of the night works. A guard against replaying a stale drag was eating the exact gesture it existed to protect.
- The radio knows when the night is over. It kept topping the queue up after the Outro closed the lineup. It also waits for two minutes of real playback before topping up, so adding your first song to an empty queue no longer looks like the app adding songs you didn't ask for.
- Cover art stays attached. It appeared for a moment and vanished on the next tick, because each pass rebuilt the reading from scratch and then refused to look the art up again.
- A planned night is written before the console comes up. A stall while opening the console could cost the whole thing — the rows are saved first now, and the Add button can no longer stick disabled.
- Force-play actually starts the show. Pressing Play on a queue row before going live put real video on the TV and then stopped: no clock, no auto-advance, no board at song end.
- Add All stopped rescanning the genre on every redraw. On a 1,900-song genre against a 50-song queue that was about 95,000 string comparisons per redraw, and every queue change triggered one.
Behind the Scenes
- Deploys resolve what to ship instead of guessing. Three times a module had been committed and never reached the server, each one breaking a feature quietly. The deploy now walks every import the API actually makes and proves they all resolve on the server before anything restarts.
- The server's biggest file was split into route modules, from 31,490 lines to 17,866, with every route pinned by a test so one going missing fails a check rather than a request. A prod-only collation drift that made some joins fail in production while passing locally was fixed at the same time, and a planner query that cost 4.4 minutes of database time per saved plan is now a precomputed rollup — 110 times faster.
- Failures that used to be silent now page us. Ten places that quietly degraded when an upstream music service was unavailable looked identical to a slightly thin catalog. That's survivable with one source feeding everything and not survivable while migrating off it, so the alerting landed before any of the re-sourcing did.