Skip to content

Releases: Genymobile/scrcpy

scrcpy v3.1

09 Dec 22:14
v3.1
Compare
Choose a tag to compare

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:

  • 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

dav1d_logo450x


scrcpy v3.0.2

04 Dec 21:51
v3.0.2
Compare
Choose a tag to compare

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:


Highlights

🤦

Highlights of 3.0.1


scrcpy v3.0.1

04 Dec 20:43
v3.0.1
Compare
Choose a tag to compare

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:

  • Set main display power for virtual display (#5522)
  • Rollback to old --turn-screen-off method for Android 15 (#5530)
  • Do not reset TCP/IP connections (#5562)
  • Fix socket interruption on macOS (#5536)
  • Fix NullPointerException on certain devices (#5537)
  • Fix camera capture failure without retry (#5539)
  • Accept control events without display (#5542)
  • Build macOS x86_64 release (#5526)
  • Fix .tar.gz compression for release tarballs (#5581)
  • Call static binary without wrapper script (#5560)

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=<addr>, 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):

ADB=adb scrcpy

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.


scrcpy v3.0

24 Nov 17:32
v3.0
Compare
Choose a tag to compare

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


scrcpy v3.0

Changes since v2.7:

  • Add virtual display feature (#5370, #5506, #1887, #4528, #5137)
  • Launch Android app on start (#5370)
  • Add OpenGL filters (#5455)
  • Add --capture-orientation to replace --lock-video-orientation
    (which was broken on Android 14) (#4011, #4426, #5455)
  • Fix --crop on Android 14 (#4162, #5387, #5455)
  • Handle virtual display rotation (#5428, #5455)
  • Add --angle to apply a custom rotation (#4135, #4345, #4658, #5455)
  • Add --screen-off-timeout (#5447)
  • Adapt "turn screen off" for Android 15 (#3927, #5418)
  • Add shortcut Ctrl+Shift+click-and-move for horizontal tilt (#5317)
  • Add shortcut MOD+Shift+r to reset video capture/encoding (#5432)
  • Forward Alt and Super with SDK Keyboard (#5318, #5322)
  • Add more details to --list-encoders output (#5416)
  • Add option to disable virtual display system decorations (#5494)
  • Fix --time-limit overflow on Windows (#5355)
  • Fix "does not match caller's uid 2000" error (#4639, #5476)
  • Accept filenames containing ':' when recording (#5487, #5499)
  • Disable mouse by default if no video playback (#5410)
  • Rename --display-buffer to --video-buffer (#5403, #5420)
  • Listen to display changed events (#5415, #161, #1918, #4152, #5362)
  • Adapt server debugging for Android >= 11 (#5346, #5466)
  • Upgrade FFmpeg to 7.1 (#5332)
  • Upgrade SDL to 2.30.9
  • Upgrade platform-tools (adb) to 35.0.2
  • Build releases via GitHub Actions (#5306, #4490)
  • Release static builds for Linux and macOS (#5515, #1733, #3235, #4489, #5327)
  • Various technical fixes

Highlights

Virtual display

By default, scrcpy mirrors the device screen.

With this new feature (#5370), it is now possible to mirror a new virtual display, with a custom size:

scrcpy --new-display=1920x1080
scrcpy --new-display=1920x1080/420  # force 420 dpi
scrcpy --new-display         # use the main display size and density
scrcpy --new-display=/240    # use the main display size and 240 dpi

On some devices, a launcher is available in the virtual display.

When no launcher is available, the virtual display is empty. In that case, you must start an Android app.

For example:

scrcpy --new-display=1920x1080 --start-app=org.videolan.vlc

To list the Android apps installed on the device:

scrcpy --list-apps

For convenience, you can also select an app by its name using a ? prefix:

scrcpy --start-app=?firefox

However, retrieving app names may take some time (sometimes several seconds), so passing the package name is recommended.

On-device OpenGL filters

Scrcpy can now transform the captured video stream before encoding by applying OpenGL filters directly on the device. This has made it possible to fix several issues and implement new features, as described below (more details in #5455).

Crop

The --crop option was broken for devices running Android >= 14 (#4162). It has been reimplemented using OpenGL filters internally.

Its usage remains the same:

scrcpy --crop=800:600:100:100

It now also works for camera and virtual displays.

Capture orientation

The --lock-video-orientation option was broken for devices running Android >= 14 (#4011).

It has been replaced by a more general option --capture-orientation, implemented using OpenGL filters:

scrcpy --capture-orientation=0
scrcpy --capture-orientation=90       # 90° clockwise
scrcpy --capture-orientation=180      # 180°
scrcpy --capture-orientation=270      # 270° clockwise
scrcpy --capture-orientation=flip0    # hflip
scrcpy --capture-orientation=flip90   # hflip + 90° clockwise
scrcpy --capture-orientation=flip180  # hflip + 180°
scrcpy --capture-orientation=flip270  # hflip + 270° clockwise

The capture orientation can be locked by using a @ prefix, so that a physical device rotation does not change the captured video orientation:

scrcpy --capture-orientation=@         # locked to the initial orientation
scrcpy --capture-orientation=@0        # locked to 0°
scrcpy --capture-orientation=@90       # locked to 90° clockwise
scrcpy --capture-orientation=@180      # locked to 180°
scrcpy --capture-orientation=@270      # locked to 270° clockwise
scrcpy --capture-orientation=@flip0    # locked to hflip
scrcpy --capture-orientation=@flip90   # locked to hflip + 90° clockwise
scrcpy --capture-orientation=@flip180  # locked to hflip + 180°
scrcpy --capture-orientation=@flip270  # locked to hflip + 270° clockwise

Now, it also works for camera (fixing #4426) and virtual displays.

Custom rotation

A new option --angle allows to rotate the content by a custom angle. Combined with --crop, this is especially useful for mirroring the Meta Quest 3 (#4135, #4345, #4658).

Virtual display rotation

The new virtual display feature initially could not rotate. The rotation has been implemented using OpenGL filters.

(That is what triggered the development of OpenGL filters.)

Like previously, the current app can be rotated by MOD+r (shortcuts).

Screen off timeout

The existing option --stay-awake only keeps the device awake *while it is plugged in, meaning it typically does not work over TCP/IP.

A new option, --screen-off-timeout, modifies the screen-off timeout setting while scrcpy is running and restores it on exit:

scrcpy --screen-off-timeout=300  # 300 seconds (5 minutes)

Static builds

For convenience, static builds are now provided for Linux and macOS (#5515).

More targets might be added in the future.

This is still experimental for now, so if you encounter problems, please report them.

Features you might have missed

If you haven't tried scrcpy in a while, here are some features introduced in the 2.x versions that you might have missed (check the release notes to each version for more details):


scrcpy v2.7

15 Sep 19:30
v2.7
Compare
Choose a tag to compare

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


scrcpy v2.7

Changes since v2.6.1:

  • Add gamepad support (#99, #2130, #5270)
  • Fix workarounds for ONYX devices (#5182)
  • Accept float values for --max-fps (265a15e)
  • Upgrade SDL to 2.30.7 in Windows releases
  • Various technical fixes

Highlights

Gamepad support

With this new version, it is possible to play Android games using game controllers (for example a PS4/PS5 or XBox gamepad) connected to the computer (provided that the game supports gamepads).

Like physical keyboard and mouse simulation, gamepads can use either UHID or AOA.

To enable gamepad support, just run:

scrcpy -G

It can work without mirroring:

scrcpy --no-video --no-audio -G

and in OTG mode (i.e. without requiring USB debugging):

scrcpy --otg -G

More details in #5270 and in the documentation.

--max-fps improvement

Android accepts floating point values for the frame rate limitation, but --max-fps only accepted integers. Now, it accepts floating point values.

In particular, this allows to capture at a frame rate lower than 1 fps. For example, to capture 1 frame every 5 seconds:

scrcpy --video-source=camera --camera-size=1920x1080 --max-fps=0.2 --record=file.mp4

This might be useful for creating a timelapse. (The video can be sped up afterwards with FFmpeg.)


scrcpy v2.6.1

02 Aug 21:01
v2.6.1
Compare
Choose a tag to compare

To receive a notification on new releases, click on Watch > Custom > Releases on the top.


scrcpy v2.6.1

Changes since v2.6:

  • Inject finger input whenever possible (#5162, #5163)

Highlights

See v2.6 release notes.

Some changes in scrcpy 2.6 caused issues with mouse events in some applications.
This hotfix version fixes them (773c23f).

Sorry for the inconvenience.


scrcpy v2.6

01 Aug 17:01
v2.6
Compare
Choose a tag to compare

To receive a notification on new releases, click on Watch > Custom > Releases on the top.


scrcpy v2.6

Changes since v2.5:

  • Add audio playback capture method (#4380, #5102)
  • Add audio duplication feature (#3875, #4380, #5102)
  • Add mouse secondary bindings with Shift+click (#5055, #5076)
  • Rework mouse events (#5067, #5076)
  • Fix "turn screen off" for Honor devices (#4823, #4943, #5109)
  • Add clipboard workaround for Honor devices (#4822, #5073)
  • Always apply device workarounds (#4922, #5140, #5148, #5154)
  • Fix missing initialization (#5057, #5058)
  • Do not report error on device disconnected (#5044)
  • Upgrade SDL to 2.30.5 in Windows releases
  • Various technical fixes

Highlights

Audio mirroring

Audio forwarding was introduced in scrcpy 2.0. Until now, when audio was captured by scrcpy, it was necessarily disabled on the device.

This release introduces a new audio capture method, which (optionally) supports audio duplication, to keep playing audio on the device. It is exposed as an alternative audio source named playback (in addition to output, the default, and mic).

scrcpy --audio-source=playback               # do not play on the device
scrcpy --audio-source=playback --audio-dup   # keep playing on the device

For convenience, --audio-dup automatically selects the playback audio source. Therefore, to mirror audio rather than forward, this is sufficient:

scrcpy --audio-dup

However, this playback capture has some drawbacks:

  • it requires Android 13 (rather than Android 11),
  • Android apps can opt-out, in which case they are not captured.

See documentation, #4380, #5102.

Secondary mouse bindings

By default, with SDK mouse:

  • right-click triggers BACK (or POWER on)
  • middle-click triggers HOME
  • the 4th click triggers APP_SWITCH
  • the 5th click expands the notification panel

It was also possible to forward the clicks to the device instead, by using the --mouse-bind=xxxx option introduced in the previous version (2.5). But that way, we had to choose at startup whether a button triggered a shortcut or a click.

This release introduces a new set of secondary bindings via Shift+click, so that both are possible at runtime.

By default, a simple (secondary) click triggers the shortcuts, and Shift+click forwards the click to the device.

In AOA and UHID mouse modes, the default bindings are reversed: all clicks are forwarded by default, and pressing Shift gives access to the shortcuts (since the cursor is handled on the device side, it makes more sense to forward all mouse buttons by default in these modes).

All these mouse bindings can be configured, check the documentation.

See #5076.


scrcpy v2.5

29 Jun 16:03
v2.5
Compare
Choose a tag to compare

To receive a notification on new releases, click on Watch > Custom > Releases on the top.


scrcpy v2.5

Changes since v2.4:

  • Add scrcpy window without video playback (#4727, #4793, #4868)
  • Add a shortcut to pause/unpause display (#1632, #4748)
  • Forward mouse hover events (#2743, #3070, #5039)
  • Add option to configure mouse bindings (#5022)
  • Forward all clicks by default for UHID/AOA (#5022)
  • Simplify shortcut modifiers (#4741)
  • Fix rotation shortcut for Android 14 (#4740, #4841)
  • Fix YUV conversion for full color range (#4756)
  • Fix camera sizes listing on some devices (#4852)
  • Fix thread leak on Windows (#4973)
  • Upgrade FFmpeg to 7.0.1 in Windows releases
  • Upgrade SDL to 2.30.4 in Windows releases
  • Upgrade platform-tools (adb) to 35.0.0 in Windows releases
  • Various technical fixes

Highlights

Control-only

By default, scrcpy now always opens a window (unless --no-window is passed), even without video stream (#4868).

In particular, this gives the possibility to solely control the device without screen mirroring:

scrcpy --no-video --no-audio

window

In that case, UHID mouse mode is used by default. It works both over USB and wirelessly.

This is different from OTG mode, which does not require USB debugging at all. Here, the standard mode is used but with the possibility to disable video playback.

Pause/unpause display

New shortcuts allow to pause (MOD+z) and unpause MOD+Shift+z the display (#4748).

It only impacts rendering, the device is still captured, the video stream transmitted to the device, and recorded if recording is enabled.

This can be useful for example during a presentation, to temporarily move to a different app on the device without showing the content.

Mouse hover

Initially, mouse motion (hover) events were not forwarded to the device when no mouse button was pressed. The reason was that at the time (6 years ago), these events had absolutely no impact on the devices I tested.

But on newer Android versions and newer apps, mouse hover events trigger animations and highlight items. So this new release forwards hover events, with a new option --no-mouse-hover to disable them.

Mouse bindings

By default, mouse secondary clicks triggers shortcuts:

  • right click: BACK
  • middle click: HOME
  • 4th click: APP_SWITCH
  • 5th click: expand notification panel

An option --forward-all-clicks had been added some time ago to forward all clicks to the device instead.

This release replaces --forward-all-clicks by a more flexible option --mouse-bind=xxxx. The argument must be exactly 4 characters, one for each secondary click:

--mouse-bind=xxxx
             ^^^^
             ||||
             ||| `- 5th click
             || `-- 4th click
             | `--- middle click
              `---- right click

Each character must be one of the following:

  • +: forward the click to the device
  • -: ignore the click
  • b: trigger shortcut BACK (or turn screen on if off)
  • h: trigger shortcut HOME
  • s: trigger shortcut APP_SWITCH
  • n: trigger shortcut "expand notification panel"

For example:

scrcpy --mouse-bind=bhsn  # the default mode
scrcpy --mouse-bind=++++  # forward all clicks (default for AOA/UHID)
scrcpy --mouse-bind=++bh  # forward right and middle clicks,
                          # use 4th and 5th for BACK and HOME

With UHID and AOA mouse modes (when the mouse cursor appears on the device), all clicks are now forwarded by default (but the behavior can be changed using --mouse-bind).


scrcpy v2.4

02 Mar 23:17
v2.4
Compare
Choose a tag to compare

To receive a notification on new releases, click on Watch > Custom > Releases at the top.


scrcpy v2.4

Changes since v2.3.1:

  • Add UHID keyboard and mouse support (#4473)
  • Simulate tilt multitouch by pressing Shift (#4529)
  • Add rotation support for non-default display (#4698)
  • Improve audio player (#4572)
  • Adapt to display API changes in Android 15 (#4646, #4656, #4657)
  • Adapt audio workarounds to Android 14 (#4492)
  • Fix clipboard for IQOO devices on Android 14 (#4492, #4589, #4703)
  • Fix integer overflow for audio packet duration (#4536)
  • Rework cleanup (#4649)
  • Upgrade FFmpeg to 6.1.1 in Windows releases (#4713)
  • Upgrade libusb to 1.0.27 in Windows releases (#4713)
  • Various technical fixes

Highlights

UHID keyboard

This is a huge improvement for typing text, especially in non-English languages:

scrcpy --keyboard=uhid
scrcpy -K  # short version

It simulates a physical keyboard. Contrary to the default text injection method, it is not limited to ASCII and some other characters.

This is functionally equivalent to the existing AOA mode (--keyboard=aoa), except it is not limited to USB (it also works wirelessly) and it works on Windows while mirroring (and without driver issues).

The keyboard layout must be configured (once and for all) on the device to match that of the computer (that's the reason why it's not the default). To open the keyboard settings, several possibilities:

  • from the scrcpy window (when uhid or aoa is used), by pressing MOD+k (see shortcuts)
  • from the device, in Settings → System → Languages and input → Physical devices
  • from a terminal on the computer, by executing adb shell am start -a android.settings.HARD_KEYBOARD_SETTINGS

From there, it is also possible to enable or disable the virtual keyboard.

See #4473.

UHID mouse

Similarly, it is possible to simulate a physical mouse:

scrcpy --mouse=uhid
scrcpy -M  # short version

Like in AOA mode (--mouse=aoa), the computer mouse is "captured": the mouse pointer disappears from the computer and appears on the Android device instead.

Special capture keys, either Alt or Super, toggle (disable or enable) the mouse capture. Use one of them to give the control of the mouse back to the computer.

See #4473.

Simulate tilt

It was already possible to simulate two symmetric fingers to pinch-to-zoom or rotate by using Ctrl+click-and-move:

ctrl.mp4

This new version introduces a variant to tilt by using Shift+click-and-move-up-or-down:

shift.mp4

Technically, scrcpy generates additional touch events from a "virtual finger" at a location inverted through the center of the screen. When pressing Ctrl the x and y coordinates are inverted. Using Shift only inverts x.

See #4529 and documentation.

Android 15

A lot of refactors related to display occurred in Android, which required changes to continue working with the latest Android beta versions.

See #4657.


scrcpy v2.3.1

02 Dec 11:44
v2.3.1
Compare
Choose a tag to compare

To receive a notification on new releases, click on Watch > Custom > Releases on the top.


scrcpy v2.3.1

Changes since v2.3:

  • Add workaround for issues on Samsung devices (#4467)
  • Fix error in a headless environment without display (#4477)
  • Fix AV1 demuxing (#4487)
  • Fix build issue on macOS (4135c41)

Highlights

Version 2.3 fixed the camera feature for many devices. But these changes caused issues on some Samsung devices (#4467).

This minor release fixes these issues.