github RamazanKara/nightjar v4.0.0-alpha.1
Nightjar 4.0.0-alpha.1

pre-release4 hours ago

Nightjar 4.0.0-alpha.1 is a preview of Nightjar 4.0, the client for Rubylight 3.0. It is a prerelease: Nightjar 3.2.3 stays the version the app and the store offer. It brings split-screen co-op, Dolby Vision on HEVC and AV1, HDR10, HLG and HDR10+ through "Render through Vulkan", HLG on PyroWave, fixes for MediaTek TVs, clipboard sync, files and shared folders, a keyboard that follows text fields, and simpler settings. Most of the new features need a PC with Rubylight 3.0; with any other Moonlight host Nightjar works as before.

Highlights

  • Split-screen co-op. Join co-op lists the co-op games running on a PC, with their free slots, and starts your stream in a free one. Every player gets their own game window, controller and sound.
  • Dolby Vision on HEVC and AV1. With a Dolby Vision screen and decoder, Nightjar asks a Rubylight PC for Dolby Vision, and keeps AV1 where the decoder handles Dolby Vision AV1, as TCL's MediaTek TVs do.
  • HDR through Vulkan. "Render through Vulkan" now shows HDR10 on Android 10 to 14 too, HLG on screens that show only HLG, and passes HDR10+ on to a screen that has it.
  • HLG on PyroWave. A screen that shows HDR only as HLG gets HLG on PyroWave too. Nightjar checks each display before the stream.
  • MediaTek TVs. Dolby Vision and HDR10+ now show as such on TCL's TVs, HDR streams no longer freeze after they start, and sound no longer drops out on Wi-Fi that goes quiet now and then.
  • Clipboard sync, files and shared folders. Text you copy goes between this device and the PC as you copy it, images can be copied both ways, and you can send files to the PC and browse the folders it shares.
  • The keyboard follows text fields. Tap into a text field on the PC and the keyboard opens, fitting the field; it closes after.
  • Simpler settings. Each section opens on the settings most people change. Recover interrupted streams is on by default, and automatic bitrate is now called Device controls bitrate.

Streaming quality

  • New setting, Error correction (Android and desktop): leave it to the PC, follow this device's losses, or fix it at 10 to 50 %. Only Rubylight PCs take it. The PC's setting stays the default until it has been tested on a phone over Wi-Fi.
  • Every streaming engine tells a Rubylight PC once a second how much video was lost, so a PC that adapts its error correction follows this device's network. The report goes on during seconds without video.
  • On a Rubylight PC that changes rates mid-stream, the stream menu has one control, Change bitrate / frame rate; the PC's answer, a limit or a refusal shows as a message. A request the PC leaves unanswered is given up on after 5 seconds, and an older answer no longer undoes a newer bitrate.
  • Loss-based bitrate (off by default, under Advanced; Client-hint bitrate on the desktop) lowers the bitrate when frames are lost and raises it after clean seconds, in place of the PC's. The stream doctor no longer runs its own bitrate trial against it.
  • Link test before the first bitrate (off by default, under Advanced, Diagnostics): a new stream at the automatic bitrate tests the link to a Rubylight PC first and starts no higher. Off because it started lower, with more loss, in our tests.
  • Decoders: Snapdragon decoders get extra low-latency options when they support them. MediaTek decoders ask for shorter queues first and fall back if that fails. HEVC low-latency flags is now Auto, On or Off; Auto leaves them out on newer Amlogic TV boxes (not Fire TV), where they caused trouble.
  • A frame too large for the decoder's buffer restarts the decoder with a bigger one instead of ending the stream.
  • When video decoding keeps failing, for example after a graphics driver reset, Nightjar opens the decoder again, and if that does not help, ends the stream with a message instead of a frozen picture.
  • The debug overlay shows frame pacing: average interval, jitter, judder, vsyncs per frame and a timeline of the last frames.
  • Desktop: the performance overlay has Compact, Statistics and Debug modes and sits in any corner; Statistics and Debug show the PC's CPU and GPU readings and the PC's frame rates at each step (display, captured, encoded, sent, repeated) when it offers them. Quick resume goes straight back into a running game, and Input-only works on any PC.
  • Desktop: a PyroWave frame lost on the network no longer counts towards ending the stream as a broken decoder.

HDR and Dolby Vision

  • Dolby Vision. With a Dolby Vision screen and decoder, Nightjar asks a Rubylight 3.0 PC for Dolby Vision 8.1 or 8.4 over HEVC, or 10.1 over AV1 where the decoder handles Dolby Vision AV1 and the PC offers it. If the decoder fails, the same stream goes on as HDR10 or HLG and the overlay says so. With the automatic codec and a PC that offers only Dolby Vision 8, the stream uses HEVC, since profile 8 is HEVC only. Dolby Vision needs "Render through Vulkan" off, and HEVC or AV1; with PyroWave the stream is HDR10 or HLG.
  • HLG. A screen with HLG and no HDR10 gets HLG from a Rubylight 3.0 PC, on HEVC, AV1 and PyroWave, and the overlay names the format. Nightjar checks each display before the stream: one that refuses HLG gets HDR10, and the status line says so. With an older Rubylight 3.0 PC, PyroWave stays HDR10 and the overlay says that updating the PC adds HLG.
  • "Render through Vulkan" with HDR. It now shows HDR10 on Android 10 to 14, where it used to tone-map HDR to SDR, HLG where the screen's window takes it, and HDR10+ on a screen that has it, with "HDR10+" in the overlay. If the screen refuses HDR from it, the overlay says the picture is shown as SDR; where an Android version lacks the HDR10+ call, the stream stays HDR10 and a message says so.
  • When "Render through Vulkan" can't keep up on a display (it shows under 80 % of the received frames, or of the display's refreshes when the stream runs faster, for 5 seconds), a message says so once per PC and suggests turning it off. The setting stays as you set it. On the TCL C6K it showed about 10 fps in HDR and 24 fps in SDR, so direct output stays the better choice there.
  • "Why did my stream stutter?" takes its once-a-second sample off the app's main thread, so a hanging decoder can no longer freeze the app, and a failing sample no longer ends it.
  • MediaTek TVs such as TCL's. The TV now shows a Dolby Vision stream as Dolby Vision: frames reach the decoder without the trailing padding these TVs took as broken Dolby Vision data. HEVC streams with HDR10+ show as HDR10+ instead of SDR. HDR streams no longer freeze shortly after they start: the PC's HDR data now reaches the running decoder as a parameter instead of restarting it, and this holds on every device from Android 10. A decoder whose output still lacks it 60 frames later restarts with it, as before. "Render through Vulkan" no longer freezes after the first frames on these TVs.
  • HEVC streams keep the PC's HDR10+ and HDR Vivid scene data on the way to the decoder.

Co-op

  • Join co-op in a PC's menu (Android) or on its details page (desktop) lists the PC's Nucleus Co-op sessions with their free slots and your own seat, joins a slot or returns you to yours, starts the stream, and shows every refusal with the PC's reason. Each player sees their own game window, uses their own controller and hears their own game.
  • End session and Disconnect work for a co-op player too.

Clipboard, files and folders

  • Clipboard sync (off by default; Android under Settings, Controls, with the New streaming engine; desktop too): with a Rubylight PC, text copied here goes on the PC's clipboard and text copied on the PC comes here, without opening the stream menu. The PC must allow this device to read and write its clipboard. Android reads the clipboard only while the stream is in front, so a copy made in another app goes once you are back.
  • Images on the clipboard. The stream menu sends a copied image to the PC and copies the PC's here, as PNG. An image too large for this device says so.
  • Files. Send files to a PC and download the files in its file transfer folder, from the PC menu, Home or the stream menu, or by sharing files to Nightjar from another app. Each transfer can be cancelled and tried again; a refusal says what to change on the PC. Nightjar for Windows has the same Files page; downloads land in Downloads.
  • Shared folders. A PC's menu opens the folders it shares with this device: browse them, download files and, with a write grant, upload. A folder the PC can't read says so and points to its permissions.
  • Transfers are safer: changing dark mode, font, display size or language no longer cancels them; a download no longer overwrites a file saved under the same name or another download's unfinished file; a download that sends more than its listed size stops; cancelling a transfer to a PC that stopped answering ends it at once. An unexpected permission value from the PC no longer turns file transfer off.

Devices and input

  • The keyboard follows text fields. On a Rubylight PC, the keyboard opens when you tap, click or type into a text field in the stream, fitting the field (digits for numbers, no suggestions for passwords), and closes after. A field a game focuses by itself leaves it closed, and a keyboard you closed stays closed for that field. The stream moves up so the field stays above the keyboard. Off in Settings. The desktop does the same where the system has an on-screen keyboard. Deleting text while a word is still being composed no longer finishes the word first.
  • Nightjar tells a Rubylight PC its keyboard layout, so games that read raw keys get the keys on your keyboard.
  • Microphone (#42): echo cancellation, noise suppression, automatic gain and a gain slider. Echo cancellation is automatic: on with the speaker, off with headphones and Bluetooth headsets, and it follows a switch during the stream. An optional round button on the stream mutes and unmutes with one tap. When the microphone stops working, for example because another app took it, Nightjar says so and mutes it; unmuting tries again. An effect this device doesn't have reads "Not on this device".
  • Modern on-screen controller: a new style beside Classic, with face buttons that take a thumb on two at once, floating or fixed sticks, a stick click by tap then touch, and an editor in the stream to move, resize, fade and hide each control for one game or all. Classic stays the default. The editor fits a phone in portrait.
  • Extra controller buttons (#45): buttons such as C, Z and Button 1 to 16 can press the touchpad click, Share / Capture or paddles 1 to 4 on the PC. A controller with a button mapped to the touchpad click connects as a PlayStation controller. A Share mapping now also remaps a USB pad's Share, and a USB pad's mappings apply from the moment it connects.
  • A controller that cannot be opened, or one past the 16 the PC takes, shows a message. A gyroscope that only reports zeros switches player 1 to the device's motion sensors.
  • Sound for your receiver (with the New streaming engine on Android 10 and newer; PCM on the desktop): a Rubylight PC can send PCM, Dolby Digital or Dolby Digital Plus to a receiver, soundbar or TV. Dolby comes in 32 ms frames, later than Opus, which stays the default.
  • Sound on Wi-Fi that goes quiet now and then, as on a TCL TV that received nothing for up to 130 ms every 1.2 seconds, no longer drops out in bursts or switches to a fallback output: a gap is filled in from the sound before it, and audio that arrives late is skipped, so latency stays where it was. Desktop: lost audio is filled in instead of a gap, and no longer pushes the sound out of sync.
  • USB forwarding (off by default): the stream menu shows USB devices when the PC offers USB forwarding and allows it for this device, and hands a USB device such as a drawing tablet to the PC. On the desktop it is in the stream controls, which say why when it isn't available.
  • Pair with a QR code: Scan QR code in Add PC adds and pairs a Rubylight PC from the code on its Devices page; the camera is asked for only then, and pairing is refused if the PC's certificate doesn't match. On the desktop, Paste link takes the PC's copied pairing link. A pairing link to a PC that already knew this device now pairs again and checks the PC's certificate, instead of skipping that check.
  • Starting a game while another runs on a Rubylight PC closes the running game only when you confirm. The prompt names both games, and the desktop asks you instead of showing an error.
  • The local cursor now also works with Rubylight PCs that capture with Desktop Duplication. Desktop: a pen's turn in the hand reaches Rubylight PCs that take it, and its tilt now points the right way.
  • Windows and Linux: 10-bit color (SDR) no longer ends the stream at once on an SDR screen, and Prefer YUV 4:4:4 streams sharper colored text where the decoder and the PC handle it. The stream says what it got, or why not.

Settings and design

  • Settings opens each section on the settings most people change; the rest sit behind "More … settings" at the end of the section, and search still finds every setting. The desktop shows the same main rows.
  • Recover interrupted streams is on by default, on Android, Windows and Linux, including installs that kept the old default. It never starts or replaces a game.
  • Automatic bitrate is now Device controls bitrate. Off, the PC adapts the bitrate, as recommended.
  • Tell the PC when on Wi-Fi, Tell the PC the link speed and the link test moved to Advanced, Diagnostics.
  • Shared colours with the console. Green means live, yellow a warning, red poor, and a state is always a word with a shape, never colour alone. Every text colour meets 4.5:1 contrast in the night and day themes. The host list, library, stream overlay and desktop app use the same colours, type sizes and spacing; the desktop's main buttons are taller.
  • Android TV: Up and Down move one row at a time in Settings, the System theme stays dark, focus rings fit and stay inside the TV's edges, Help says "select" instead of "tap", and Play away from home speaks of this device.

Fixes

  • When the PC ended the connection while a stream was still starting, automatic recovery could end the stream it had just recovered.
  • A reconnect after another device started a game no longer names the wrong game.
  • A Remote Monitor session no longer opens or sends the microphone, and unplugging an audio device no longer reports controllers to the PC with Controllers off.
  • A damaged clipboard image no longer crashes clipboard sync.
  • Pairing from a PC's menu no longer polls the PC while you type the PIN, and a PC you remove no longer comes back as offline.
  • Logs name what started each stream, and shared logs no longer cut a setting off from its value. Desktop: a wrong command line from a frontend no longer opens a usage box behind it.
  • The PC options dialog fits its list.

Tested. Lint, the Android unit tests, the Rust protocol tests and the desktop checks pass in CI on this build. Against a Rubylight 3.0 PC with an RX 7900 XT:

  • TCL C6K TV (MediaTek MT9689, Android 14): Dolby Vision 10.1 on AV1 decoded by the TV's Dolby Vision AV1 decoder, with the RPU on 2317 of 2317 frames and Dolby Vision from the first frame; HEVC Dolby Vision 8.1 and the HDR10 control passed, with timings within noise of HDR10. HDR10 and HDR10+ (HEVC and AV1) through "Render through Vulkan" passed, about 12 µs per HDR10+ call, and the freeze after the first frames is gone. Sound: 160 ms in total, 124 ms of it in the TV's own audio output, with 2 late packets skipped, no underruns and no fallback output; audio drops in a run went from 1,496 to 19.
  • Retroid Pocket 6 (Android 13): PyroWave HLG for 45 s through the per-display check (the standard call refused HLG, the window's own call took it; display layer and host transfer both HLG). Audio latency 37 ms, unchanged.
  • Clipboard on the Retroid: images copied both ways arrived pixel for pixel, and an image over the size limit was refused in both directions.

The APKs are signed by CI with the Nightjar release key; the desktop packages (Windows zip, Linux tar.gz) are not signed. SHA-256 hashes of everything are in SHA256SUMS-4.0.0-alpha.1.txt.

Don't miss a new nightjar release

NewReleases is sending notifications on new releases.