What's new
Nightjar 4.12.4 decodes YUV 4:4:4 in hardware on Windows, skips to the newest frame when a PyroWave decoder falls behind, hands Linux HDR streams to the desktop in its own format, and fixes a run of Android controller and start-up problems. The desktop client can also be built for macOS.
Highlights
- PyroWave never queues behind a slow decoder. When the decoder is slower than the stream's frame rate, Nightjar skips to the newest frame instead of queuing frames. On a Radeon 780M laptop with a stream its decoder could not keep up with (7168x4032 at 120 fps), the delay from the PC's frame to the present call fell from 88 to 90 ms to 34 ms at the median, and the decode queue no longer overflowed. Skipped frames count as Decoder drops in the statistics overlay.
- Hardware YUV 4:4:4 on Windows. YUV 4:4:4 decodes in hardware on GPUs whose decoder supports HEVC 4:4:4 (8-bit and 10-bit). With "Sharper colored text (YUV 4:4:4)" and "Less color banding (10-bit SDR)" both on, Nightjar asks for HEVC 4:4:4 in 10-bit where the PC and this device support it. On GPUs without it, the stream uses 4:2:0 and says why.
- Linux HDR straight to the desktop. HDR streams describe their colours to the compositor at the display's own reference white and peak, and on KDE Plasma 6.5 and later they are drawn in the desktop's own HDR format, so the desktop no longer converts or tone maps each frame and can show the stream straight on the display.
- Android: Take back display queue delay. In Lowest latency and Balanced, when the display keeps a frame waiting longer than it needs to, Nightjar drops one frame so the display gives that refresh of delay back. It is on by default, under Settings → Display & image beside Frame pacing, and the log shows each step as a "Display queue" line.
- A controller's Y no longer presses things. On Android, Y no longer presses the focused item where it has no meaning, such as the "All" tile, Settings rows, dialogs and stream-menu tiles. Where a card shows Y it opens the game's options, and in a text field it still types a space.
- Starts that can't finish end with an error. A start waiting for a previous connection to close, or for a PC that never answers the launch, ends with an error instead of waiting forever (Cancel still works while it waits), and a stop that doesn't end within 10 seconds shows an error.
- Network tests in the main settings. The speed test and the PyroWave frame pace calibration are in Settings → Streaming as well as in each PC's own settings, at every settings level. With several paired PCs you choose the PC there.
- macOS from source. You can build Nightjar yourself for Apple Silicon and Intel Macs running macOS 13 or later; it streams using VideoToolbox and Metal. An Apple Silicon Mac can also build the standalone Intel app and its media libraries.
Full chroma
- Before a stream starts, Nightjar checks the PC's modes and this device's decoders. A stream that can't have full chroma starts without it and says why, instead of hanging while it starts.
- When a PC refuses full chroma after the game has started, the stream starts again right away without it and resumes the game.
- A PC that refused it is asked again after Nightjar or the PC is updated, not only when the setting is switched.
- When HDR takes priority over YUV 4:4:4, the notice says so.
Android
- Y (and F on a keyboard) on Home's game cards and lists opens the game's options instead of starting the game.
- Dialogs and sheets outside the stream blur the page behind them on Android 12 and newer, where the system offers blur.
- New setting "System keys only in full screen" (Settings → Controls → Keyboard, under "Send system keys"): while the stream is in split screen or a window, Alt+Tab, the Windows key and similar stay with your device.
- Controller motion is handled off the main thread, so gyro aiming no longer competes with drawing the stream.
- Audio packets no longer get a new buffer each on their way to playback, and the low-latency audio output no longer makes a temporary copy of each one.
- With "Video data straight to the decoder" off, the video buffer is replaced less often while frame sizes grow.
- After handing a frame to the decoder, Nightjar no longer waits for the decoder's next free input buffer on the thread that receives the stream; the next frame waits for it instead, if it has to.
- Checking whether your saved PCs are online takes less work, and the saved PC list is written only when something changed.
- Touch and pen passthrough create less memory churn while you draw or drag.
Desktop
- Dialogs blur the page under them where the glass effect is live, as the bar already did.
- New setting "System keys only in full screen" (Settings → Controls → Mouse and keyboard): with "Send system keys" on, Alt+Tab, the Windows key and similar stay with your computer while the stream is in a window.
- A PC that also answers on a second port is remembered across restarts, so it no longer shows up twice for a moment after Nightjar starts. A PC added by address without a port is the one at the default port.
- A PC found on the network is no longer merged with a different PC at the same address on another port, and a PC added by hand with its own port stays its own entry.
- A PC that never answers the launch ends the start after 2 minutes with an error.
- Home, All games and the game page do less work while nothing in your library changes. Game covers take less memory, most of all with large cover images and big libraries, and stay sharp on high-DPI screens.
- Each video frame goes to FFmpeg as it was received instead of being copied into a separate buffer first.
- PyroWave streams wake the decoder far less often while a frame arrives, and the decoder thread tracks the records it has handed to the GPU with a bitmap instead of a hash set.
- Windows: video packets are received several at a time where Windows and the network adapter support UDP receive coalescing. The log says whether it is on.
- Windows: Nightjar notices a network change when it happens instead of checking every five seconds while the launcher is open.
Linux
- With HDR on in the desktop's display settings, the launcher and SDR streams are no longer drawn far too bright and washed out, as they were since 4.12.2, and after an HDR stream the launcher is drawn at the desktop's own white.
- New setting Video → HDR brightness follows the desktop. Off by default: HDR streams show at the brightness the PC sends. On: they get brighter or dimmer with the desktop's brightness, as before.
- PyroWave pictures are drawn straight from the decoder's images instead of being copied into separate textures first, and HDR PyroWave streams with nothing drawn over them go straight to the window instead of through an extra full-screen pass.
- With VA-API decoding on Vulkan, each decoder surface is imported once and kept for its later pictures instead of being exported and imported again for every frame.
- Wayland: when the compositor asks for a different buffer layout to put the stream straight on the display, Nightjar gives it one, and with V-Sync off, VRR streams show each picture as soon as it is ready instead of queueing it.
- 10-bit 4:4:4 pictures from NVIDIA's decoder are drawn correctly.
- Flatpak: Nightjar asks only the desktop portal for a higher thread priority. RealtimeKit cannot be reached from inside the sandbox, so the log no longer carries its error on every stream.
Diagnostics
- The statistics overlay and the log name PyroWave's chroma ("PyroWave 4:4:4", "PyroWave 10-bit 4:4:4").
- The log at the end of a PyroWave stream gives the decoder's own GPU time, and on Linux with a Radeon GPU also the GPU clocks during the stream, so a slow decode can be told apart from a busy or slowly clocked GPU.
- On Linux the end-of-stream log says which presentation path a stream took and what stood for or against showing it straight on the display; for the OpenGL renderer it no longer counts presents drawn straight into the swapchain, which that renderer never does.
- The PyroWave and video decoder stage times no longer round each step down to a whole microsecond, so the PyroWave push stage, timed once per network packet, reads higher than before and matches what it costs.
Tested. The Android app's build, lint and unit tests (both flavors), the native audio tests, and the desktop client's tests and Clippy with warnings denied passed on Windows 11 and on Ubuntu 24.04; the macOS build and tests passed in CI. PyroWave from an RX 7900 XT to a Radeon 780M laptop at 3840x2160, 120 fps and 1.4 Gbps: median end to end 15.3 to 15.5 ms with this version and with 4.12.3 alike, decode 2.7 ms in 4:2:0 and 3.7 ms in 4:4:4, with no frame lost in this version's runs.