Releases: Genymobile/scrcpy
Release list
scrcpy 4.1
To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.
scrcpy v4.1
Changes since v4.0:
- Add support for VP8 and VP9 video encoders (#6763, #6769)
- Update terminal title while scrcpy is running (#6825)
- Trigger media scan after file push (#6200, #6852)
- Add Keywords to desktop entries (#6889)
- Adapt the camera target size to avoid configuration error (#6919, #6922)
- Improve the size constraints algorithm (#6829, #6859)
- Apply encoder size constraints only after the first failure (#6848, #6859)
- Add --ignore-video-encoder-constraints (#6904)
- Fix some colorspace conversions (#6830, #6924)
- Fix initial gamepad detection (#6843, #6853)
- Fix data race possibly causing a division-by-zero error (#6905, #6911)
- Upgrade FFmpeg to 8.1.2
- Upgrade SDL to 3.4.12
- Upgrade libusb to 1.0.30
- Various technical fixes
Highlights
Size constraints
The flex display feature introduced in scrcpy 4.0 requires respecting the video encoder constraints. This caused several regressions:
- sometimes, the reported encoder constraints are incorrect;
- they were not handled correctly for camera capture;
- the algorithm used to determine the maximum supported size for a given aspect ratio was too naive.
To fix or work around these issues:
- encoder size constraints are now initially ignored and enforced only after the first capture failure;
- the size constraints algorithm has been improved to select the best supported size for a given aspect ratio;
- a new option,
--ignore-video-encoder-constraints, has been added to ignore the encoder constraints entirely, including alignment (useful when the reported values are incorrect).
Terminal title
The terminal title is now updated while scrcpy is running. See #6825.
VP8 and VP9
Some devices do not support H.264, H.265, or AV1 encoding, but do support VP8 or VP9.
This release adds support for VP8 and VP9 (if supported by the device):
scrcpy --video-codec=vp9
Media scan
When pushing files via drag&drop, some Android apps do not detect the new files immediately. This release now triggers a media scan request to increase the chances that the new files are detected immediately.
- BlueSky:
@scrcpy.bsky.social - Twitter:
@scrcpy_app - Reddit:
r/scrcpy
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:
- Migrate from SDL2 to SDL3 (#6216)
- Add flex display support (#6772)
- Add camera torch and zoom support (#6243)
- Enforce window aspect ratio (#6761, #6774, #2317, #2387, #3460)
- Add --keep-active (#6792, #6787)
- Add --background-color (#6807, #5855)
- Set default background color to dark gray (#6807)
- Display disconnected icon before closing (#6662, #6651)
- Add F11 as fullscreen shortcut (#6777)
- Add Mod+q shortcut to quit (#6780, #6612)
- Fix Meta Quest flickering (#5913)
- Fix physical vs logical size confusion (#6772)
- Fix copy-paste on rooted device (#6224)
- Fix colorspace conversion issue (#1868)
- Fix high CPU usage with audio silence decoded from OPUS (#6715)
- Add session metadata for the video stream (#6159)
- Respect video capabilities constraints (#6766)
- Set Windows console code page to UTF-8 (#6663)
- Fix support for device serial containing spaces (#6663, #6664, #3537)
- Detect TCP devices provided by mDNS (#6665, #6248)
- Keep Windows terminal open on error (#6667)
- Set MediaCodec KEY_PRIORITY and KEY_LATENCY to minimum values (#6670)
- Open the scrcpy window earlier (#6694, #6546)
- Fix device rotation shortcut (5fedc79)
- Use optimal size alignment (#6746, #4949, #6236)
- Add --min-size-alignment (#6746)
- Fix screensaver disabled unexpectedly without video playback (#6754)
- Add --no-window-aspect-ratio-lock (#6761)
- Fix rotation of square displays (#6770)
- Align the virtual display size (#6771)
- Add --render-fit (#6772)
- Set default audio-output-buffer to 10ms (#6775, #3793)
- Fix turning virtual display on via right-click (#6788)
- Fix OpenGL runner shutdown deadlock (#6794)
- Share SDL hints between normal and OTG modes (#6809, #6808)
- Upgrade platform-tools (adb) to 37.0.0
- Upgrade FFmpeg to 8.1.1 (#6715)
- Upgrade SDL to 3.4.8
- Upgrade dav1d to 1.5.3
- Various technical fixes
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-decorationsscrcpy-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-displayUse --keep-active to prevent the screen from turning off (see below):
scrcpy --new-display -x --keep-activeIncrease the bit rate and/or change the codec to maintain good quality even with large windows:
scrcpy --new-display -x --video-codec=h265 -b16MSee #6772 for more details.
Camera torch and zoom
The camera can be controlled dynamically:
- MOD+t: turn on the camera torch
- MOD+Shift+t: turn off the camera torch
- MOD+↑ (up): zoom in
- MOD+↓ (down): zoom out
The camera torch can also be turned on at startup by --camera-torch:
scrcpy --video-source=camera --camera-torchThe camera zoom level can be set with --camera-zoom:
scrcpy --video-source=camera --camera-zoom=1.5The 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:
scrcpy --keep-active
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 #556677Disconnected 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:
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.
- BlueSky:
@scrcpy.bsky.social - Twitter:
@scrcpy_app - Reddit:
r/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:
- Fix permission denial error after Android upgrade (#6523)
- Fix state restoration on certain devices (#6405, #6540)
- Fix UHID_OUTPUT message parsing (#6415)
- Fix failure when the uniqueId field is missing on certain devices (#6461)
- Fix error log interleaving (#6487)
- Fix startup issue on certain Meizu devices (#6480)
- Fix handling of non-integer ANDROID_PLATFORM in build script (#6408)
- BlueSky:
@scrcpy.bsky.social - Twitter:
@scrcpy_app - Reddit:
r/scrcpy
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:
- Fix immediate error after new Android 16 upgrade (#6362)
- Fix frame memory leak on Windows in specific cases (#4297, #6357)
- Make virtual display presentable (#6344)
Highlights
A new Android 16 beta upgrade causes scrcpy to fail immediately (see #6362 for details).
This release fixes the issue.
- BlueSky:
@scrcpy.bsky.social - Twitter:
@scrcpy_app - Reddit:
r/scrcpy
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:
- Fix virtual display after Android 16 upgrade (#6234, #6331)
- Workaround clipboard issue on Samsung devices (#6224)
- Catch CTRL_BREAK_EVENT signal on Windows (#6244)
- Various technical fixes
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.
- BlueSky:
@scrcpy.bsky.social - Twitter:
@scrcpy_app - Reddit:
r/scrcpy
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:
- Fix --power-off-on-close (#6146)
- Fix clipboard with --no-clipboard-autosync (#6151)
- Fix --list-apps and --list-cameras (#6165, #6167)
- Fix HID mouse support with SDL precise scrolling (#6156, #6172)
- Add horizontal scrolling support for HID mouse (#6172)
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).
- BlueSky:
@scrcpy.bsky.social - Twitter:
@scrcpy_app - Reddit:
r/scrcpy
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:
- Associate UHID devices to virtual displays (#4829, #5547, #5557, #6009)
- Fix audio capture (again) on Android 16 (#6021)
- Fix segfault with --no-window without --no-control (#5970)
- Fix default locked capture orientation (#6010)
- Add app name SDL hint (#6107)
- Report specific error for INJECT_EVENT permission (#6080)
- Upgrade platform-tools (adb) to 36.0.0
- Upgrade SDL to 2.32.8
- Upgrade libusb to 1.0.29
- Various technical fixes
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.
- BlueSky:
@scrcpy.bsky.social - Twitter:
@scrcpy_app - Reddit:
r/scrcpy
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:
- Add many audio sources (#5870, #5412, #5670)
- Improve/fix camera listing (#5669)
- Add --display-ime-policy (#5703)
- Allow controls with --no-window (#5803, #5804)
- Add workaround for Pico 4 Ultra (#5659)
- Fix rotation after a recent Android 15 upgrade (#5908)
- Fix audio capture on Android 16 (#5698)
- Make static Linux binaries compatible with older versions (#5689)
- Make static macOS binaries compatible with older versions (#5649, #5697)
- Upgrade FFmpeg to 7.1.1
- Upgrade libusb to 1.0.28
- Upgrade SDL to 2.32.2
- Various technical fixes
Highlights
Audio sources
In addition to the existing audio sources:
output(default): forwards the whole audio output, and disables playback on the device (mapped toREMOTE_SUBMIX).playback: captures the audio playback (Android apps can opt out, so the whole output is not necessarily captured).mic: captures the microphone (mapped toMIC).
This version adds:
mic-unprocessed: captures the microphone unprocessed (raw) sound (mapped toUNPROCESSED).mic-camcorder: captures the microphone tuned for video recording, with the same orientation as the camera if available (mapped toCAMCORDER).mic-voice-recognition: captures the microphone tuned for voice recognition (mapped toVOICE_RECOGNITION).mic-voice-communication: captures the microphone tuned for voice communications (it will for instance take advantage of echo cancellation or automatic gain control if available) (mapped toVOICE_COMMUNICATION).voice-call: captures voice call (mapped toVOICE_CALL).voice-call-uplink: captures voice call uplink only (mapped toVOICE_UPLINK).voice-call-downlink: captures voice call downlink only (mapped toVOICE_DOWNLINK).voice-performance: captures audio meant to be processed for live performance (karaoke), includes both the microphone and the device playback (mapped toVOICE_PERFORMANCE).
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).
- BlueSky:
@scrcpy.bsky.social - Twitter:
@scrcpy_app - Reddit:
r/scrcpy
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:
- Add
--no-vd-destroy-content(#5615) - Improve gamepad support in games (#5623, #5362)
- Inject events to main display (#5614, #5545, #5605, #5616)
- Fix "turn screen off" on some devices (#4544, #5274)
- Improve cleanup reliability (#5613, #5601)
- Add dav1d in release builds (#5644, #4744)
- Upgrade SDL to 2.30.10
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:
- fixing the gamepad HID report descriptor
- declaring the gamepad to be a well-known Xbox 360 controller
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):
scrcpy --video-codec=av1
- BlueSky:
@scrcpy.bsky.social - Twitter:
@scrcpy_app - Reddit:
r/scrcpy
scrcpy v3.0.2
To receive a notification when a new release is available, click on Watch > Custom > Releases at the top.
scrcpy v3.0.2
Changes since v3.0.1:
- Fix version (#5602)
Highlights
🤦
- BlueSky:
@scrcpy.bsky.social - Twitter:
@scrcpy_app - Reddit:
r/scrcpy
