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:
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.
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
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.
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).
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.
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.
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
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:
More details in #6662.
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).
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)
F11 now toggles fullscreen (like MOD+f), and MOD+q now quits scrcpy.
@scrcpy.bsky.social@scrcpy_appr/scrcpy