Repository navigation
Deckboy v0.99.424 — smooth playback at any frame rate, on a Mac too; seamless loops; recordings that keep up; scopes on the graphics card
Latest0.99.424 was first published on 31 October and withdrawn within the hour: its new frame scheduler could restart itself on a small timing wobble and repeat or skip frames again. This is 0.99.424 re-released with that fixed, and with the further fixes below, found and measured since. If you downloaded it before, download it again.
The stage timer's look, where you can find it
- Backdrop and logo now sit at the top of the timer's settings, not twenty rows down. The backdrop has four presets (none, black, key green, key blue) and a colour chip that opens the colour picker, for an exact key colour, typed or picked from the screen.
- The inspector's preview shows the timer as it renders, logo, backdrop and digits, instead of "no still preview". Transparent shows as a checkerboard.
- The logo row shows a thumbnail, CHANGE and an X to remove it, and a logo size row.
- The font row opens a list of the fonts on this computer, each drawing the clock in its own face, instead of a file dialog. Type to search it; Deckboy's own face is first, and a font file that is not installed is still at the end (End jumps there). Page Up, Page Down, Home and End now work in every dropdown.
A colour to key out, on every overlay cue
- Text, Lower Third and image cues have the timer's backdrop row: none, black, key green, key blue, and a colour chip for any colour. The colour fills the layer behind the cue on every output, recording and stream, and fades with it. Transparent stays the default, so existing shows look exactly as they did.
BACKDROP [transparent | #rrggbb | name]sets it over the network, on the selected text, Lower Third, image or timer cue.
Lower Third, everywhere
- The app, the starter-pack demos and the manual now say "Lower Third": the SOURCE menu, new cues' names, the DASH button, toasts, tips and network replies. The layers demo's playlist was called "Name strap".
Scopes cost less
- With the scopes open, Deckboy uses about a fifth less CPU (measured at 1080p and 4K), and the scopes update a little faster. Only the panels on screen are uploaded, and the SOUND panel no longer runs the picture analysis it does not show.
Scopes on the graphics card: every picture at 4K60 (Windows)
- On Windows the graphics card now measures the scopes, on the output's own frame where it already is. A 4K 60 fps output is measured on every picture: 61 updates a second with under one core busy, where it managed about 21 a second on more than three cores. A 1080p output keeps up at 60 on 0.8 cores. Measured on a 32-thread laptop with an RTX 4070 Laptop GPU.
- The readings are the same as the processor's, bin for bin; a check holds the two side by side on every 8-bit colour. Waveform, parade, vectorscope, diamond, histogram and false colour are all measured this way.
- Still on the processor: the 4:2:2 signal an SDI or ST 2110 output sends, the HDR picture, and macOS and Linux. Their own graphics paths are next.
DECKBOY_CPU_SCOPES=1makes the processor measure instead, to compare.
Lock to the screen
- A video cue can now play at the screen's own rate when its frame rate is a hair off it: 59.94 fps on a 60 Hz screen, 60 on 59.94, 23.976 on 24 Hz, 29.97 on 60. Turn on lock to screen in the cue's PLAYBACK settings, or send
LOCKSCREEN on. The cue then plays up to 0.2% fast or slow, so its cadence never breaks: at 59.94 on 60 every frame is shown exactly once, where unlocked one frame stays up for two refreshes about every 17 seconds. The sound follows, as on a tape machine: 1.7 cents sharp at 0.1%. Measured on Windows with 59.94 fps on a 60 Hz screen for three minutes: no frame held or dropped. It locks a few seconds after the take. Off by default; a screen more than 0.2% off, or a cue at another speed, plays as before. STATUSreports, for each playlist,screen_lock=(the speed the cue plays at),screen_lock_state=(off, waiting, holding, locked or out_of_reach) andcadence_skips=andcadence_holds=, the frames dropped and held to keep time.
Fixed
- An output that could not keep up with its screen said nothing. Its rate is now judged against the screen's own refresh, so an output running at 57 on a 60 Hz screen counts every frame it misses instead of looking smooth. The OUTPUT badge above the programme monitor turns to a warning while frames are being missed. Three missed in five seconds tells you which output, how many and at what refresh, once a minute at most. The test card shows "fps of" the screen's rate and the frames missed, and
STATUSreportsmissed=andtarget_hz=for each output. - 29 of the 16.7 million 8-bit colours read one luma step low on the waveform and histogram: 17 in BT.709, 12 in BT.2020. Each sat exactly on a step's edge. The 8-bit analysis now works in whole numbers and puts every colour in its exact bin, and is faster for it: a 4K frame on six processor threads takes 23 ms instead of 41.
- A looping video froze its output for about a tenth of a second, five or six frames, every time it went round, on any output that is not Direct3D 11: every Mac and Linux output, and a Windows output set to the GPU renderer. That freeze is gone. Measured on Windows; macOS and Linux share the change but have not yet been measured on a real screen.
- A playing video made an output on the GPU renderer miss 50 to 70 frames a minute at 1080p60 on Windows. In testing it now misses 0 to 15 a minute (the default Direct3D 11 output: 0 to 3). Each frame also costs less on every output that is not Direct3D 11 with hardware decoding: every Mac and Linux output, and on Windows any cue with colour or key effects. The Windows figures are measured; macOS and Linux share the change but have not yet been measured on a real screen.
- Clips whose frame rate does not match the screen now play with an even cadence. 24 fps on a 60 Hz screen is a steady 3:2, 25 fps the regular 2-3 pattern that pair allows, 30 fps holds every frame for two refreshes, 50 fps runs 1-1-1-1-2, and 60 fps on a 59.94 Hz screen drops a single frame about every 17 seconds (none, with the cue locked to the screen: above). Before, a screen at or near the clip's rate could repeat a frame and then skip one, again and again: on an output using the GPU renderer, up to one frame in six never reached the screen while the output itself reported no missed frames. Each clip in a playlist gets its own cadence. The picture stays within a frame of the playback clock, as before.
- A looping clip broke at every loop: the last picture held, the first frames of the next pass were skipped, and the sound dropped out. Loops are now seamless in both picture and sound, including clips trimmed with in and out points, sound-only cues, and clips whose frame rate differs from the screen's. A looping cue also no longer fades out and back in at the loop point.
- Repeats did nothing: a cue set to play three times went round for ever. It now plays that many times, then holds its last frame or moves on, as it would without the loop.
- Recordings made through the GPU renderer came out as one frozen picture, or started with half a second frozen and then fell back to a slower capture. They now record every frame from the start. The GPU renderer is the default on macOS and Linux and an option on Windows; measured on Windows, and macOS and Linux share the change.
- Stopping a recording froze every output for about a third of a second, and so did every automatic roll onto a new file during a long recording. The file is now finished in the background while the outputs carry on, and quitting Deckboy still waits for every recording to be finished.
- On a Mac, an output did not wait for its screen. It presented about 100 times a second on a 60 Hz screen and timed its frames by that, so a 60 fps clip missed about 140 refreshes a minute, and a 60 fps recording caught a new picture only every other frame. Deckboy now waits for each screen's own refresh before it presents. Measured on an M4 MacBook Air: 60 presents a second and no refreshes missed in a minute, on the built-in screen and an external one, and recordings catch 56 new pictures a second of 60 (measured with the Mac's sound card unused). Deckboy Mini waits for the screen the same way.
- On the GPU renderer (the default on a Mac and on Linux, and an option on Windows), handing each video frame to the graphics card now and then held the output for up to 14 ms, sometimes 60: a missed refresh. Frames now reuse their upload buffers, and those holds are gone. Measured on Windows.
- A recording or stream of a cue playing at a tape speed (a fade cue's SPEED, or a cue locked to the screen) dulled its high frequencies and added a faint warble: recorded at 0.1% to 0.2% fast, a 10 kHz tone carried a sideband only 23 dB under it. The recording now gets the same resampling the room hears: that sideband is 56 dB or more under the tone. Measured on Windows.
- A ProRes recording at 60 fps came out as an empty file: the encoder stopped after the first few frames while the take ran on, and the recording reported it was dropping frames. It records every frame now.
- Recording at 4K made the outputs drop frames: handing each frame to the encoder took longer than a frame lasts at 60 fps. It takes about a quarter of that now.
- On a long recording the sound slowly fell out of step with the picture: when the sound card's clock ran fast against the computer's, the sound drifted later and later (about 67 ms an hour on a measured card), and when it ran slow, short gaps of silence appeared once the difference grew past 60 ms. While there is sound, a recording now keeps time by the sound card, so the sound is exactly what was played and stays in step with the picture.
- Recordings had their picture about a tenth of a second behind their sound (three frames at 30 fps), outside the EBU R37 lip-sync window. Picture and sound now line up within a frame.
- The program monitor's DECODE reading no longer flips to WARM each time a looping clip goes round, or when you edit the cue that is playing. It keeps the last rate until the next reading.
- A stage timer's logo was drawn with red and blue swapped.
- Importing a PowerPoint, Keynote or PDF can no longer leave Deckboy on the import card for ever. A converter still busy after three minutes (often PowerPoint waiting on a prompt it cannot show, such as Protected View or sign-in), or a PDF renderer silent for ninety seconds, is stopped, and the toast says what happened and what to try.
- Every slide import now writes its steps to the show log: which file, whether it was converted and by what, and how many pages it rendered, or where it stopped.
- Ctrl+Shift+Space (stop every deck) now works from anywhere in Deckboy: with Settings, the shortcuts sheet, a text field or a menu open, and while an output or the Monitors window has the focus. Before, any of those took the keys first and nothing stopped. It also stops every deck the way the deck's own STOP does, fades included, and stops whatever was waiting to start a deck again: a pre-wait or a continue counting down, a running sequence and the dashboard's tracker. Before, a deck could start again a few seconds after you stopped everything.
- On Windows, drawing the desk could hold up the outputs: the desk waited for Windows to take its last picture before it drew the next one, and an output waiting behind it missed a refresh. The desk no longer waits. Measured on Windows: the longest the desk held up the outputs went from 16 ms to about 1 ms.
- Deckboy now tells you when Windows is showing an output at a different rate from its screen's (see Known issues), once per output, and
STATUSreports, for each output,paced_hz=(the rate its frames are actually shown at) besidetarget_hz=(its screen's), and on Windowscompositor_hz=, the rate Windows draws the desktop at.
Companion module 1.0.9
- With a Companion passphrase set in Deckboy, the module never sent the passphrase you entered, so that Deckboy could not be controlled from Companion 5. It now sends it.
- A wrong or missing passphrase no longer makes the connection status flick between OK, Bad config and Connection failure every few seconds. It stays on the passphrase message until you change the connection's settings, and the module stops trying the refused passphrase, so it no longer counts towards Deckboy's limit on wrong attempts.
- The connection turns green only once Deckboy answers.
- The Device field on Output limiter on / off and Output effects: bypass all takes variables.
- Run dashboard tile says in the log why it sent nothing when the tile number is not valid.
Known issues
- Outputs on the GPU renderer still miss a few screen refreshes a minute (above). macOS and Linux use the same kind of renderer.
- Playback on Linux has not yet been measured on a real screen. On macOS it was measured with the sound card unused, so sound in playback and recordings on a Mac is not yet measured.
- On Windows, an output on a screen whose refresh rate differs from the rate Windows draws the desktop at (usually your main screen's) is shown at the desktop's rate, not its own: beside a 60 Hz main screen, a 59.94 Hz screen drops or repeats a frame about every 15 seconds, and the further apart the two rates, the more often. Deckboy warns you when this is happening. Until it is fixed (it is on the roadmap), run the screens at the same refresh rate. The manual's "Screens at different refresh rates" says how.
- The first recording of a session holds every output for about 70 ms (four frames at 60 fps) as it starts. Later recordings in the session do not.
Downloads
| Platform | Installer | Portable |
|---|---|---|
| Windows | Deckboy-0.99.424-windows-x64-setup.exe |
Deckboy-0.99.424-windows-x64.zip |
| macOS (Apple Silicon) | Deckboy-0.99.424-macos-arm64.dmg |
Deckboy-0.99.424-macos-arm64.zip |
| macOS (Intel) | Deckboy-0.99.424-macos-x86_64.dmg |
Deckboy-0.99.424-macos-x86_64.zip |
| Linux (x86_64) | Deckboy-0.99.424-x86_64.AppImage |
Deckboy-0.99.424-linux-x86_64.tar.gz |
Every build carries what it needs — the binary, ffmpeg and its runtime libraries. Nothing else to install.
Deckboy Mini on its own
Mini also comes inside every download above. On its own, for a screen that only needs to play:
| Platform | File |
|---|---|
| Windows | Deckboy-Mini-0.99.424-windows-x64.zip |
| macOS (Apple Silicon) | Deckboy-Mini-0.99.424-macos-arm64.zip |
| macOS (Intel) | Deckboy-Mini-0.99.424-macos-x86_64.zip |
| Linux (x86_64) | Deckboy-Mini-0.99.424-linux-x86_64.tar.gz |
| Raspberry Pi (64-bit) and ARM64 Linux | Deckboy-Mini-0.99.424-linux-arm64.tar.gz |
Linux (Flatpak): Deckboy-0.99.424-x86_64.flatpak — flatpak install --user Deckboy-0.99.424-x86_64.flatpak (the runtime comes from Flathub).
Control surfaces
| Surface | File | How |
|---|---|---|
| Stream Deck | Deckboy-1.0.0.streamDeckPlugin |
Double-click it. |
| Bitfocus Companion | Deckboy-companion-module-1.0.9.zip |
Unzip it somewhere permanent, then point Companion's developer modules path at the folder containing it. INSTALL.txt inside has the three steps. |
First run
Deckboy is free software and is not code-signed, so the OS does not recognise the publisher. One time only:
- macOS — if it says the app is damaged:
xattr -dr com.apple.quarantine /Applications/Deckboy.app - Windows — SmartScreen may appear: More info → Run anyway
Deckboy is free, open-source cue-based media playback and show control for live video — clips, slides and live sources on one cue list, out to a screen, NDI, SRT or Blackmagic SDI, with a stream and a recording running at the same time and presenter view on its own display, driven from a Stream Deck, Bitfocus Companion, OSC, MIDI or LTC timecode.
What it does · Manual · How it compares · FAQ · Full history
If Deckboy runs part of your show, a ⭐ on the repository is how the next operator finds it.