Releases · Genymobile/scrcpy (original) (raw)

scrcpy 4.0

To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.


scrcpy v4.0

Changes since v3.3.4:


Highlights

SDL3

This release migrates from SDL2 to SDL3 to benefit from active maintenance, bug fixes, and continued upstream support. SDL3 also enables new features, such as aspect-ratio locking when resizing the window.

Thanks to the SDL maintainers for their work and for their support and fixes!

See #6216 for details.

Flex display

A virtual display can now be made flex using --flex-display (or -x), meaning it can be resized dynamically along with the client window.

Here is a demo:

scrcpy --new-display=/192 -x --start-app=org.mozilla.firefox --keep-active --no-vd-system-decorations

scrcpy-flex-display-2.mp4

Here are more examples:

Start Android Settings in a window

scrcpy --new-display=1024x768/160 --start-app=com.android.settings --flex-display

-x is equivalent to --flex-display

scrcpy --new-display=1024x768/160 --start-app=com.android.settings -x

By default, the display size/dpi is 1280x960/160

scrcpy --new-display --start-app=com.android.settings --flex-display

Use --keep-active to prevent the screen from turning off (see below):

scrcpy --new-display -x --keep-active

Increase the bit rate and/or change the codec to maintain good quality even with large windows:

scrcpy --new-display -x --video-codec=h265 -b16M

See #6772 for more details.

Camera torch and zoom

The camera can be controlled dynamically:

The camera torch can also be turned on at startup by --camera-torch:

scrcpy --video-source=camera --camera-torch

The camera zoom level can be set with --camera-zoom:

scrcpy --video-source=camera --camera-zoom=1.5

The supported zoom range for each camera is given by --list-cameras (any value outside the supported range will be clamped).

Aspect ratio

Previously, the window could be freely resized, and black borders were added to maintain the content aspect ratio.

Thanks to a new API in SDL3, the window aspect ratio is now preserved while resizing, avoiding black borders.

The old behavior can be restored using --no-window-aspect-ratio-lock.

Keep active

To prevent the device from turning off due to inactivity, --keep-active periodically signals user activity to the system:

Contrary to --stay-awake and --screen-off-timeout, this does not change any global settings, and it works whether the device is plugged in or not.

Background color

The default background was pure black; it is now dark gray.

It can be changed with --background-color, which accepts hexadecimal color codes (in 3-digit or 6-digit format):

scrcpy --background-color=#234567 scrcpy --background-color=234567 # leading '#' is optional scrcpy --background-color=#567 # equivalent to #556677

Disconnected icon

When the connection to the device is lost while mirroring, the window previously closed immediately, which could incorrectly suggest that scrcpy had crashed.

To make disconnections clearer, a disconnected icon is now displayed for 2 seconds before closing the window.

The icon replaces the screen content immediately:

scrcpy_disconnected_2_small

More details in #6662.

Meta Quest

Since a Meta Quest firmware upgrade, flickering occurred when mirroring the screen with scrcpy.

A workaround was implemented, so mirroring a Meta Quest now works again.

See the technical details in #5913 (comment).

High CPU usage with silence

A funny bug: playing silence used much more CPU than playing non-silence, during resampling of audio samples decoded from an OPUS audio stream (resampling was about 40× slower).

It turns out it was caused by denormals: the OPUS decoder did not produce exact zeros, but tiny denormal numbers, which can cause performance issues.

This was fixed directly in FFmpeg: #6715 (comment)

More shortcuts

F11 now toggles fullscreen (like MOD+f), and MOD+q now quits scrcpy.


scrcpy v3.3.4

To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.


scrcpy v3.3.4

Changes since v3.3.3:


scrcpy v3.3.3

To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.


scrcpy v3.3.3

Changes since v3.3.2:


Highlights

A new Android 16 beta upgrade causes scrcpy to fail immediately (see #6362 for details).

This release fixes the issue.


scrcpy v3.3.2

To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.


scrcpy v3.3.2

Changes since v3.3.1:


Highlights

The security upgrade from September 5th on Pixel devices caused virtual displays to fail in scrcpy when desktop experience features are enabled (in Developer options > Windows Management > Enable desktop experience features).

This release resolves the issue.


scrcpy v3.3.1

To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.


scrcpy v3.3.1

Changes since v3.3:


Highlights

Fixes

Some technical changes introduced in scrcpy 3.3 had side effects that broke certain features. This release resolves those issues.

Mouse scrolling

This version also includes several improvements and fixes related to mouse scrolling (#6172).


scrcpy v3.3

To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.


scrcpy v3.3

Changes since v3.2:


Highlights

UHID mouse & virtual displays

On Android >= 15, the mouse pointer now correctly appears on a new virtual display (when running with --new-display --mouse=uhid). See #6009.

Android 16

Audio capture in scrcpy 3.2 was broken with Android 16 (ironically due to a change intended to fix audio in Android 16 beta). The issue is resolved in this
release.


scrcpy v3.2

To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.


scrcpy v3.2

Changes since v3.1:


Highlights

Audio sources

In addition to the existing audio sources:

This version adds:

See #5870.

Note: If you record voice calls to a file, audio/video synchronization might be broken during playback. Read more details.

Android 15 and 16

This version includes fixes for changes in Android 15 that broke automatic rotation (#5908) and Android 16 that broke audio capture (#5698).

Static binaries

To ensure maximum compatibility, static binaries are now built for older versions of Linux distributions (#5689) and macOS (#5649, #5697).


scrcpy v3.1

To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.


scrcpy v3.1

Changes since v3.0.2:


Highlights

Keep virtual display content on close

When a virtual display is closed, the running apps are destroyed.

A new option (--no-vd-destroy-content, #5615) allows moving the apps to the main display instead:

scrcpy --new-display --no-vd-destroy-content

This is particularly useful for avoiding the loss of work due to unexpected disconnections. The running app can be moved back to a new virtual display afterward.

Note that the running apps follow the standard Android lifecycle. Some apps, especially 3D games, may simply restart on the main display when the virtual display is closed.

Gamepad support

Gamepad support was implemented by #5270 in scrcpy 2.7.

While it worked well with gamepad testers, it was partially or totally incompatible with many games.

In this new version, several changes (#5623) allow games to detect and use gamepads correctly:

Fix unclickable elements

Since the introduction of virtual displays in scrcpy 3.0, the injection of input events has been slightly modified. While the new behavior resolves issues with virtual displays (#4598, #5137), it caused some UI elements in overlays to become unclickable.

To fix the problem, this new release restores the previous behavior when mirroring the main display (#5614).

Fix "turn screen off" on some devices

On Android 14, scrcpy uses a specific mechanism to turn the screen off (#4456), but this method failed on some devices.

Now, it also works on these devices: #4544 (comment)

AV1 decoder

Recent devices have an AV1 encoder (and it works quite well).

On Linux, when building using system libraries, it was already working. But no AV1 decoder was included in release builds.

This new version adds dav1d support to decode AV1 streams (#5644).

If your device has an AV1 encoder (scrcpy --list-encoders):

dav1d_logo450x


scrcpy v3.0.2

scrcpy v3.0.1

To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.


scrcpy v3.0.1

Changes since v3.0:


Highlights

This release fixes some issues from scrcpy 3.0.

Turn screen off

There were two major problems with the --turn-screen-off feature.

Firstly, Android 15 introduced a new mechanism to set the display power, used by scrcpy 3.0 (#5418). Unfortunately, it does not work as expected: video mirroring was broken or frozen when the display power was off.

Therefore, this version rolls back to the previous mechanism, even for Android 15.

In addition, --turn-screen-off was disabled when mirroring a virtual display because there was no display to power off. However, on some devices, interacting with the virtual display requires the device to be unlocked (with the main screen powered on).

In such cases, it might make sense to power on the device, but with the screen physically turned off (useful in conjunction with stay awake or a custom screen off timeout).

Therefore, the "turn screen off" feature is now enabled with virtual displays, and it changes the power mode of the main display.

TCP/IP multi-instances

When scrcpy was run with --tcpip=, to make sure a new working connection was established, any previous connection to the same address was disconnected. However, this caused all running instances connected to that address to be killed.

Running several instances of scrcpy on the same device is now useful with virtual displays, so change the default behavior to NOT disconnect.

To force a reconnection, a '+' prefix can be added:

scrcpy --tcpip=+192.168.0.3

Releases

For scrcpy 3.0, static builds were released for Linux (x86_64) and macOS (aarch64).

For 3.0.1, a new build for macOS x86_64 has been added.

Some changes have been made in the way scrcpy finds dependent files (adb, scrcpy-server and icon.png). Static releases are build in "portable" mode, which means that scrcpy must find the expected files in the same directory as the executable. This was implemented via a wrapper shell script in 3.0, but it had limitations (e.g., it did not work properly when executing the script from a symlink in another location). This functionality is now fully implemented in C.

By default, scrcpy uses the provided adb binary. If you want to use the adb binary from your system, set the ADB environment variable to the path of your adb (or just adb so that it is searched in $PATH):

Also, the .tar.gz releases for 3.0 were actually non-gzipped tarballs (#5581). The tarballs for 3.0.1 are now correctly gzipped.

Other specific issues have been fixed; see the full changelog above.