v2025.118.151840

LizardByte/Sunshinev2025.118.151840Jan 18, 2025by LizardByte-bot

AI Summary

A feature-rich release introducing Windows.Graphics.Capture API, HDR support, and macOS multi-monitor capture, alongside a critical security update.

Key Highlights

  • Windows: New Windows.Graphics.Capture API capture method
  • Windows: Native YUV 4:4:4 encoding support
  • macOS: Support for capturing displays other than the main display
  • macOS: Automatic discovery support
  • UI: Dark mode support
  • Linux: Eliminated need for driver patching to use NvFBC

New Features

  • Automatic resolution and HDR mode changing on Windows
  • DS4, Switch Pro, and Xbox One controller emulation on Linux
  • Removed limit on concurrent streaming sessions
  • Flow control to reduce dropped packets
  • Clients can be named and unpaired individually

Full Release Notes

## Attention

This release contains critical security updates. For more information see
[GHSA-3hrw-xv8h-9499](https://github.com/LizardByte/Sunshine/security/advisories/GHSA-3hrw-xv8h-9499).
Please update as soon as possible!

This release also contains many new features and bug fixes, including:

- Implemented automatic resolution and HDR mode changing on Windows.
- Implemented YUV 4:4:4 encoding support for Intel and NVIDIA GPUs on Windows.
- Implemented automatic discovery support for macOS hosts.
- Added support for capturing displays other than the main display on macOS.
- Added support for emulating DS5, Nintendo Switch Pro, and Xbox One controllers on Linux.
- Removed the limit on concurrent streaming sessions.
- Eliminated the need for driver patching to use NvFBC capture on Linux.
- Significantly reduced CPU usage for encoding when using AMD GPUs (RDNA or later) on Windows.
- Fixed video traffic timeout error when streaming from a Hyper-V VM using GPU Paravirtualization.
- Fixed inability to stream from a Windows machine when using the Microsoft Basic Display Adapter driver.
- Optimized internal frame handling by eliminating redundant data copies and using functions optimized for SSSE3,
  AVX2, and AVX512.
- Implemented flow control to reduce the chance of dropped packets by overwhelmed routers or network switches.
- Reworked the video encoding rate control logic for VA-API to improve bitrate efficiency on Linux.
- New capture method using Windows.Graphics.Capture API on Windows.
  This is an experimental feature and requires running Sunshine manually.
  It is not compatible with running Sunshine as a service.
- Clients can now be named and unpaired individually.
- The web UI now supports dark mode.
- Checkboxes replace select menus for boolean settings in the web UI.
- RestAPI improvements.

For a more comprehensive list of user-facing changes, see below.

## What's Changed
* feat(macos/capture): support for capture display other than main display by [@TimmyOVO](https://github.com/TimmyOVO) in [#2449](https://github.com/LizardByte/Sunshine/pull/2449)
* fix(macos/input): incorrect mouse input for non-main display by [@TimmyOVO](https://github.com/TimmyOVO) in [#2461](https://github.com/LizardByte/Sunshine/pull/2461)
* webui: Update resolution automation example text with auto refresh rate by [@cgarst](https://github.com/cgarst) in [#2503](https://github.com/LizardByte/Sunshine/pull/2503)
* fix(linux): add frame processing latency and logging improvements by [@gschintgen](https://github.com/gschintgen) in [#2502](https://github.com/LizardByte/Sunshine/pull/2502)
* AppImage: add needed VA-API libraries (Intel & AMD) by [@gschintgen](https://github.com/gschintgen) in [#2429](https://github.com/LizardByte/Sunshine/pull/2429)
* Allow a custom FFmpeg build to be provided using CMake variables by [@chewi](https://github.com/chewi) in [#1970](https://github.com/LizardByte/Sunshine/pull/1970)
* Fix log message for Periodic Ping by [@c3m3gyanesh](https://github.com/c3m3gyanesh) in [#2538](https://github.com/LizardByte/Sunshine/pull/2538)
* feat(ui): Dark Mode by [@Hazer](https://github.com/Hazer) in [#2493](https://github.com/LizardByte/Sunshine/pull/2493)
* build(win): use UCRT64 environment instead of MinGW64. by [@tez011](https://github.com/tez011) in [#2323](https://github.com/LizardByte/Sunshine/pull/2323)
* feat(win): new capture method, Windows.Graphics.Capture  by [@tez011](https://github.com/tez011) in [#2580](https://github.com/LizardByte/Sunshine/pull/2580)
* Name and unpair individual clients by [@xanderfrangos](https://github.com/xanderfrangos) in [#2042](https://github.com/LizardByte/Sunshine/pull/2042)
* feat(audio): custom surround-params by [@mariotaku](https://github.com/mariotaku) in [#2424](https://github.com/LizardByte/Sunshine/pull/2424)
* Remove the need for a patched nvidia library for NvFBC. by [@hgaiser](https://github.com/hgaiser) in [#2471](https://github.com/LizardByte/Sunshine/pull/2471)
* build(linux): add homebrew support by [@ReenigneArcher](https://github.com/ReenigneArcher) in [#2667](https://github.com/LizardByte/Sunshine/pull/2667)
* fix(macos): Mouse input broken in-game by [@Hazer](https://github.com/Hazer) in [#2550](https://github.com/LizardByte/Sunshine/pull/2550)
* feat(input/linux): add support for more virtual input devices by [@Hazer](https://github.com/Hazer) in [#2606](https://github.com/LizardByte/Sunshine/pull/2606)
* fix(linux/input): battery values conversion by [@ABeltramo](https://github.com/ABeltramo) in [#2715](https://github.com/LizardByte/Sunshine/pull/2715)
* feat: add min_fps_target setting by [@ReenigneArcher](https://github.com/ReenigneArcher) in [#1043](https://github.com/LizardByte/Sunshine/pull/1043)
* fix(upnp): support newer miniupnpc library by [@ReenigneArcher](https://github.com/ReenigneArcher) in [#2782](https://github.com/LizardByte/Sunshine/pull/2782)
* macOS: New implementation of service publication by [@cathyjf](https://github.com/cathyjf) in [#2786](https://github.com/LizardByte/Sunshine/pull/2786)
* build(linux): drop support for AUR by [@ReenigneArcher](https://github.com/ReenigneArcher) in [#2819](https://github.com/LizardByte/Sunshine/pull/2819)
* Implement basic network flow control by [@ns6089](https://github.com/ns6089) in [#2803](https://github.com/LizardByte/Sunshine/pull/2803)
* Provide SSSE3, AVX2, and AVX512 optimized Reed-Solomon functions by [@cgutman](https://github.com/cgutman) in [#2828](https://github.com/LizardByte/Sunshine/pull/2828)
* Eliminate a redundant alloc+copy of each frame by [@cgutman](https://github.com/cgutman) in [#2852](https://github.com/LizardByte/Sunshine/pull/2852)
* Implement S/G IO for non-batched sends and eliminate more data copies by [@cgutman](https://github.com/cgutman) in [#2867](https://github.com/LizardByte/Sunshine/pull/2867)
* Implement S/G IO for batched sends and eliminate another frame copy by [@cgutman](https://github.com/cgutman) in [#2874](https://github.com/LizardByte/Sunshine/pull/2874)
* Migrate audio pipeline to float from 16-bit integer by [@ns6089](https://github.com/ns6089) in [#2873](https://github.com/LizardByte/Sunshine/pull/2873)
* Handle CTRL_CLOSE_EVENT on Windows by [@ns6089](https://github.com/ns6089) in [#2952](https://github.com/LizardByte/Sunshine/pull/2952)
* feat!: drop advertised resolutions and fps by [@ReenigneArcher](https://github.com/ReenigneArcher) in [#2924](https://github.com/LizardByte/Sunshine/pull/2924)
* fix(linux): ensure NvFBC capture works after multiple sessions by [@insanemal](https://github.com/insanemal) in [#3020](https://github.com/LizardByte/Sunshine/pull/3020)
* feat(win/video): support native YUV 4:4:4 encoding by [@ns6089](https://github.com/ns6089) in [#2533](https://github.com/LizardByte/Sunshine/pull/2533)
* fix(linux): enable lowlatency mode for AMD by [@ReenigneArcher](https://github.com/ReenigneArcher) in [#3088](https://github.com/LizardByte/Sunshine/pull/3088)
* fix(nvhttp): wrap TLS socket to ensure graceful closure by [@cgutman](https://github.com/cgutman) in [#3077](https://github.com/LizardByte/Sunshine/pull/3077)
* fix(mdns): don't hardcode mDNS instance name by [@cgutman](https://github.com/cgutman) in [#3084](https://github.com/LizardByte/Sunshine/pull/3084)
* fix(win/video): don't offload chroma subsampling math to texture sampler when downscaling by [@ns6089](https://github.com/ns6089) in [#3014](https://github.com/LizardByte/Sunshine/pull/3014)
* build(cmake): Prioritize vendored includes over system-wide by [@jmou](https://github.com/jmou) in [#3182](https://github.com/LizardByte/Sunshine/pull/3182)
* fix(macos): Touch input broken by [@BayLee4](https://github.com/BayLee4) in [#3240](https://github.com/LizardByte/Sunshine/pull/3240)
* fix(video): encode at least one frame before capture reinit by [@cgutman](https://github.com/cgutman) in [#3300](https://github.com/LizardByte/Sunshine/pull/3300)
* fix: Reverse Proxy support by [@Degot](https://github.com/Degot) in [#3173](https://github.com/LizardByte/Sunshine/pull/3173)
* feat(stream)!: remove limit on concurrent sessions and allow quitting apps with active sessions by [@cgutman](https://github.com/cgutman) in [#3325](https://github.com/LizardByte/Sunshine/pull/3325)
* fix(nvenc): disable filler data in AV1 bitstream by [@cgutman](https://github.com/cgutman) in [#3336](https://github.com/LizardByte/Sunshine/pull/3336)
* feat(vaapi): add option to enable strict enforcement of frame size by [@cgutman](https://github.com/cgutman) in [#3332](https://github.com/LizardByte/Sunshine/pull/3332)
* fix(macos): prevent indefinite hanging if screen capture is not granted by [@cathyjf](https://github.com/cathyjf) in [#3360](https://github.com/LizardByte/Sunshine/pull/3360)
* fix(process): avoid leaking zombies and fds in detached processes by [@cgutman](https://github.com/cgutman) in [#3379](https://github.com/LizardByte/Sunshine/pull/3379)
* fix(hostname): fix handling of non-ASCII hostnames on Windows by [@cgutman](https://github.com/cgutman) in [#3382](https://github.com/LizardByte/Sunshine/pull/3382)
* feat(display)!: Add libdisplaydevice dependency and output name mapping by [@FrogTheFrog](https://github.com/FrogTheFrog) in [#2894](https://github.com/LizardByte/Sunshine/pull/2894)
* fix(nvenc): Enable opt-in client refresh by client by [@TheElixZammuto](https://github.com/TheElixZammuto) in [#3415](https://github.com/LizardByte/Sunshine/pull/3415)
* fix(shaders/directx): replace modulus with bitwise operator by [@iMakeSoftware](https://github.com/iMakeSoftware) in [#3499](https://github.com/LizardByte/Sunshine/pull/3499)
* feat(display): Configure display device based on user config by [@FrogTheFrog](https://github.com/FrogTheFrog) in [#3441](https://github.com/LizardByte/Sunshine/pull/3441)
* fix(confighttp): do not return 200 on errors by [@ReenigneArcher](https://github.com/ReenigneArcher) in [#3385](https://github.com/LizardByte/Sunshine/pull/3385)
* feat(display): add display mode remapping option by [@FrogTheFrog](https://github.com/FrogTheFrog) in [#3529](https://github.com/LizardByte/Sunshine/pull/3529)
* fix(capture/windows): fix capture when using the basic render driver by [@cgutman](https://github.com/cgutman) in [#3531](https://github.com/LizardByte/Sunshine/pull/3531)
* feat(capture/windows): hook APIs to avoid output reparenting that breaks DDA by [@cgutman](https://github.com/cgutman) in [#3530](https://github.com/LizardByte/Sunshine/pull/3530)
* fix(checkbox): inverse global prep values for apps by [@FrogTheFrog](https://github.com/FrogTheFrog) in [#3547](https://github.com/LizardByte/Sunshine/pull/3547)

## New Contributors
* [@TimmyOVO](https://github.com/TimmyOVO) made their first contribution in [#2449](https://github.com/LizardByte/Sunshine/pull/2449)
* [@cgarst](https://github.com/cgarst) made their first contribution in [#2503](https://github.com/LizardByte/Sunshine/pull/2503)
* [@skryvel](https://github.com/skryvel) made their first contribution in [#2514](https://github.com/LizardByte/Sunshine/pull/2514)
* [@c3m3gyanesh](https://github.com/c3m3gyanesh) made their first contribution in [#2538](https://github.com/LizardByte/Sunshine/pull/2538)
* [@BeeLeDev](https://github.com/BeeLeDev) made their first contribution in [#2555](https://github.com/LizardByte/Sunshine/pull/2555)
* [@xanderfrangos](https://github.com/xanderfrangos) made their first contribution in [#2042](https://github.com/LizardByte/Sunshine/pull/2042)
* [@hgaiser](https://github.com/hgaiser) made their first contribution in [#2471](https://github.com/LizardByte/Sunshine/pull/2471)
* [@cathyjf](https://github.com/cathyjf) made their first contribution in [#2786](https://github.com/LizardByte/Sunshine/pull/2786)
* [@cfalas](https://github.com/cfalas) made their first contribution in [#2841](https://github.com/LizardByte/Sunshine/pull/2841)
* [@insanemal](https://github.com/insanemal) made their first contribution in [#3020](https://github.com/LizardByte/Sunshine/pull/3020)
* [@jmou](https://github.com/jmou) made their first contribution in [#3183](https://github.com/LizardByte/Sunshine/pull/3183)
* [@BayLee4](https://github.com/BayLee4) made their first contribution in [#3240](https://github.com/LizardByte/Sunshine/pull/3240)
* [@andygrundman](https://github.com/andygrundman) made their first contribution in [#3294](https://github.com/LizardByte/Sunshine/pull/3294)
* [@midwesternrodent](https://github.com/midwesternrodent) made their first contribution in [#3287](https://github.com/LizardByte/Sunshine/pull/3287)
* [@caveat-makes-software](https://github.com/caveat-makes-software) made their first contribution in [#3264](https://github.com/LizardByte/Sunshine/pull/3264)
* [@Degot](https://github.com/Degot) made their first contribution in [#3173](https://github.com/LizardByte/Sunshine/pull/3173)
* [@soerenkampschroer](https://github.com/soerenkampschroer) made their first contribution in [#3348](https://github.com/LizardByte/Sunshine/pull/3348)
* [@davidemarcoli](https://github.com/davidemarcoli) made their first contribution in [#3356](https://github.com/LizardByte/Sunshine/pull/3356)
* [@MiroKaku](https://github.com/MiroKaku) made their first contribution in [#3416](https://github.com/LizardByte/Sunshine/pull/3416)
* [@petrhanak](https://github.com/petrhanak) made their first contribution in [#3490](https://github.com/LizardByte/Sunshine/pull/3490)
* [@iMakeSoftware](https://github.com/iMakeSoftware) made their first contribution in [#3499](https://github.com/LizardByte/Sunshine/pull/3499)
* [@Gurubaseio](https://github.com/Gurubaseio) made their first contribution in [#3466](https://github.com/LizardByte/Sunshine/pull/3466)

**Full Changelog**: https://github.com/LizardByte/Sunshine/compare/v0.23.1...v2025.118.151840

---
## Contributors
<a href="https://github.com/ReenigneArcher" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, ReenigneArcher" ><img src="https://github.com/ReenigneArcher.png?size=40" width="40" height="40" alt="ReenigneArcher" title="ReenigneArcher: 139 merges" ></a><a href="https://github.com/dependabot" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, dependabot" ><img src="https://github.com/dependabot.png?size=40" width="40" height="40" alt="dependabot" title="dependabot: 98 merges" ></a><a href="https://github.com/cgutman" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, cgutman" ><img src="https://github.com/cgutman.png?size=40" width="40" height="40" alt="cgutman" title="cgutman: 27 merges" ></a><a href="https://github.com/LizardByte-bot" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, LizardByte-bot" ><img src="https://github.com/LizardByte-bot.png?size=40" width="40" height="40" alt="LizardByte-bot" title="LizardByte-bot: 21 merges" ></a><a href="https://github.com/ns6089" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, ns6089" ><img src="https://github.com/ns6089.png?size=40" width="40" height="40" alt="ns6089" title="ns6089: 17 merges" ></a><a href="https://github.com/FrogTheFrog" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, FrogTheFrog" ><img src="https://github.com/FrogTheFrog.png?size=40" width="40" height="40" alt="FrogTheFrog" title="FrogTheFrog: 14 merges" ></a><a href="https://github.com/Hazer" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, Hazer" ><img src="https://github.com/Hazer.png?size=40" width="40" height="40" alt="Hazer" title="Hazer: 8 merges" ></a><a href="https://github.com/gschintgen" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, gschintgen" ><img src="https://github.com/gschintgen.png?size=40" width="40" height="40" alt="gschintgen" title="gschintgen: 7 merges" ></a><a href="https://github.com/cathyjf" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, cathyjf" ><img src="https://github.com/cathyjf.png?size=40" width="40" height="40" alt="cathyjf" title="cathyjf: 5 merges" ></a><a href="https://github.com/TimmyOVO" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, TimmyOVO" ><img src="https://github.com/TimmyOVO.png?size=40" width="40" height="40" alt="TimmyOVO" title="TimmyOVO: 3 merges" ></a><a href="https://github.com/jmou" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, jmou" ><img src="https://github.com/jmou.png?size=40" width="40" height="40" alt="jmou" title="jmou: 3 merges" ></a><a href="https://github.com/tez011" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, tez011" ><img src="https://github.com/tez011.png?size=40" width="40" height="40" alt="tez011" title="tez011: 3 merges" ></a><a href="https://github.com/BayLee4" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, BayLee4" ><img src="https://github.com/BayLee4.png?size=40" width="40" height="40" alt="BayLee4" title="BayLee4: 2 merges" ></a><a href="https://github.com/BeeLeDev" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, BeeLeDev" ><img src="https://github.com/BeeLeDev.png?size=40" width="40" height="40" alt="BeeLeDev" title="BeeLeDev: 2 merges" ></a><a href="https://github.com/Degot" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, Degot" ><img src="https://github.com/Degot.png?size=40" width="40" height="40" alt="Degot" title="Degot: 2 merges" ></a><a href="https://github.com/Gurubaseio" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, Gurubaseio" ><img src="https://github.com/Gurubaseio.png?size=40" width="40" height="40" alt="Gurubaseio" title="Gurubaseio: 2 merges" ></a><a href="https://github.com/MiroKaku" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, MiroKaku" ><img src="https://github.com/MiroKaku.png?size=40" width="40" height="40" alt="MiroKaku" title="MiroKaku: 2 merges" ></a><a href="https://github.com/andygrundman" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, andygrundman" ><img src="https://github.com/andygrundman.png?size=40" width="40" height="40" alt="andygrundman" title="andygrundman: 2 merges" ></a><a href="https://github.com/c3m3gyanesh" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, c3m3gyanesh" ><img src="https://github.com/c3m3gyanesh.png?size=40" width="40" height="40" alt="c3m3gyanesh" title="c3m3gyanesh: 2 merges" ></a><a href="https://github.com/caveat-makes-software" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, caveat-makes-software" ><img src="https://github.com/caveat-makes-software.png?size=40" width="40" height="40" alt="caveat-makes-software" title="caveat-makes-software: 2 merges" ></a><a href="https://github.com/cfalas" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, cfalas" ><img src="https://github.com/cfalas.png?size=40" width="40" height="40" alt="cfalas" title="cfalas: 2 merges" ></a><a href="https://github.com/cgarst" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, cgarst" ><img src="https://github.com/cgarst.png?size=40" width="40" height="40" alt="cgarst" title="cgarst: 2 merges" ></a><a href="https://github.com/chewi" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, chewi" ><img src="https://github.com/chewi.png?size=40" width="40" height="40" alt="chewi" title="chewi: 2 merges" ></a><a href="https://github.com/davidemarcoli" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, davidemarcoli" ><img src="https://github.com/davidemarcoli.png?size=40" width="40" height="40" alt="davidemarcoli" title="davidemarcoli: 2 merges" ></a><a href="https://github.com/hgaiser" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, hgaiser" ><img src="https://github.com/hgaiser.png?size=40" width="40" height="40" alt="hgaiser" title="hgaiser: 2 merges" ></a><a href="https://github.com/iMakeSoftware" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, iMakeSoftware" ><img src="https://github.com/iMakeSoftware.png?size=40" width="40" height="40" alt="iMakeSoftware" title="iMakeSoftware: 2 merges" ></a><a href="https://github.com/insanemal" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, insanemal" ><img src="https://github.com/insanemal.png?size=40" width="40" height="40" alt="insanemal" title="insanemal: 2 merges" ></a><a href="https://github.com/kelvie" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, kelvie" ><img src="https://github.com/kelvie.png?size=40" width="40" height="40" alt="kelvie" title="kelvie: 2 merges" ></a><a href="https://github.com/midwesternrodent" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, midwesternrodent" ><img src="https://github.com/midwesternrodent.png?size=40" width="40" height="40" alt="midwesternrodent" title="midwesternrodent: 2 merges" ></a><a href="https://github.com/petrhanak" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, petrhanak" ><img src="https://github.com/petrhanak.png?size=40" width="40" height="40" alt="petrhanak" title="petrhanak: 2 merges" ></a><a href="https://github.com/skryvel" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, skryvel" ><img src="https://github.com/skryvel.png?size=40" width="40" height="40" alt="skryvel" title="skryvel: 2 merges" ></a><a href="https://github.com/soerenkampschroer" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, soerenkampschroer" ><img src="https://github.com/soerenkampschroer.png?size=40" width="40" height="40" alt="soerenkampschroer" title="soerenkampschroer: 2 merges" ></a><a href="https://github.com/xanderfrangos" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, xanderfrangos" ><img src="https://github.com/xanderfrangos.png?size=40" width="40" height="40" alt="xanderfrangos" title="xanderfrangos: 2 merges" ></a><a href="https://github.com/ABeltramo" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, ABeltramo" ><img src="https://github.com/ABeltramo.png?size=40" width="40" height="40" alt="ABeltramo" title="ABeltramo: 1 merge" ></a><a href="https://github.com/Nonary" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, Nonary" ><img src="https://github.com/Nonary.png?size=40" width="40" height="40" alt="Nonary" title="Nonary: 1 merge" ></a><a href="https://github.com/TheElixZammuto" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, TheElixZammuto" ><img src="https://github.com/TheElixZammuto.png?size=40" width="40" height="40" alt="TheElixZammuto" title="TheElixZammuto: 1 merge" ></a><a href="https://github.com/mariotaku" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, mariotaku" ><img src="https://github.com/mariotaku.png?size=40" width="40" height="40" alt="mariotaku" title="mariotaku: 1 merge" ></a><a href="https://github.com/sitiom" target="_blank" rel="external noopener noreferrer" aria-label="GitHub profile of contributor, sitiom" ><img src="https://github.com/sitiom.png?size=40" width="40" height="40" alt="sitiom" title="sitiom: 1 merge" ></a>