Skip to content

Releases: Genymobile/scrcpy

scrcpy v1.16

10 Aug 18:51
v1.16
Compare
Choose a tag to compare

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


scrcpy v1.16

Changes since v1.15.1:

  • Add pinch-to-zoom simulation (#24)
  • Fix clipboard paste (#1658)
  • Inject POWER instead of WAKEUP on start (#1655)

Highlights

Pinch-to-zoom simulation

This is a long time requested feature (#24).

To simulate "pinch-to-zoom": Ctrl+click-and-move.

More precisely, hold Ctrl while pressing the left-click button. Until the left-click button is released, all mouse movements scale and rotate the content (if supported by the app) relative to the center of the screen.

Concretely, scrcpy generates additional touch events from a "virtual finger" at a location inverted through the center of the screen.

Bugfixes

Pasting (e.g. via Ctrl+v) was broken in some cases (#1658). The fix would have required a new hotfix version (v1.15.2), but since pinch-to-zoom is ready, just go for v1.16 right now.

In addition, some devices apparently do not support the WAKEUP key, so inject POWER on start to turn the device screen on.

scrcpy v1.15.1

07 Aug 10:18
v1.15.1
Compare
Choose a tag to compare

scrcpy v1.15.1

Hotfix for v1.15:

  • Fix uninitialized value, breaking HOME shortcut randomly (#1643)

scrcpy v1.15

06 Aug 19:54
v1.15
Compare
Choose a tag to compare

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


scrcpy v1.15

Changes since v1.14:

  • Forward Ctrl and Shift to the device (#1598, #555, #942)
  • Change "resize to fit" shortcut from MOD+x to MOD+w (#1598)
  • Make shortcut modifiers customizable (#1598)
  • Restore power mode to "normal" on disconnection (#1572, #1576)
  • Keep the screen off on powering on (best effort) (#1573, #1577)
  • Add option to disable screensaver (#1370, #1502)
  • Do not crash on missing clipboard manager (#1440, #1556)
  • Fix touch events HiDPI-scaling (#1536, #15)
  • Correctly inject repeating keycodes (#1013, #1519)
  • Add option to ignore repeated key events (#1013, #1623)
  • Increase clipboard size from 4k to 256k (#1117)
  • Do not expose internal SDL logs to users (#1441)
  • Upgrade platform-tools to 30.0.4 (adb) in Windows releases
  • Upgrade FFmpeg to 4.3.1 in Windows releases

Highlights

Ctrl and Shift

Ctrl and Shift keys are now forwarded to the device.

This allows to trigger many shortcuts on the device itself. For example, Ctrl+t in Firefox opens a new tab, Ctrl+w closes the current tab. Ctrl+c or Ctrl+d can now be injected in Termux. Ctrl+z could be used to cancel an action, like a change in a text field for example.

This also greatly simplifies text selection, by using the keyboard (Shift+arrows, Ctrl+a…). And it makes copy-paste more straightforward (see below).

Customizable shortcut modifier

Since Ctrl is now forwarded to the device, scrcpy must use another shortcut modifier (called MOD in the documentation). By default, it's either (left) Alt or (left) Super.

The shortcut modifier can be changed by a command-line parameter (--shortcut-mod). Here are some examples:

# use RCtrl for shortcuts
scrcpy --shortcut-mod=rctrl
# use either LAlt or RCtrl
scrcpy --shortcut-mod=lalt,rctrl
# use LCtrl+LAlt
scrcpy --shortcut-mod=lctrl+lalt
# use LCtrl+LAlt or Super
scrcpy --shortcut-mod=lctrl+lalt,lsuper,rsuper

Seamless copy-paste

Forwarding Ctrl brings a lot of changes and improvements regarding copy-paste:

  • To copy or cut a text, Ctrl+c and Ctrl+x typically work, because they are forwarded to the device, which, in a text field, copies the text into the clipboard… and the clipboard is now automatically (since v1.14) synchronized with the computer keyboard.
  • Pressing Ctrl+v synchronizes the computer clipboard to the device before sending the key event, therefore pasting typically works seamlessly.
  • Seamless copy-paste introduced in v1.14 was limited if Android <= 7; by using Ctrl keys, it now works on all supported versions.
  • MOD+c, MOD+x and MOD+v are also provided to inject COPY, CUT and PASTE keycodes (see README for details).
  • MOD+Shift+v injects the computer clipboard content as a sequence of key events (it was Ctrl+v on previous versions, this is still useful sometimes).
  • to be able to bind CUT to MOD+x, the "resize to fit" shortcut (which removes the black borders) has been changed to MOD+w.

The clipboard size has also been increased from 4k to 256k.

Screen off improvements

MOD+o (or --turn-screen-off) allows to mirror with physical screen turned off.

However, the physical screen was not automatically restored on disconnection, which was annoying. Now it is.

In addition, on Android, pressing POWER cancels the effect of turn screen off. For convenience, scrcpy now attempts to maintain the screen off when it generates a POWER event (either via right-click or MOD+p).

Repeating key events

When a key is hold pressed, the system generates repeated key events.

The repeat count is now correctly forwarded to Android, and an option (--no-key-repeat) has been added to completely disable them. This mitigates keyboard lag in some games.

scrcpy v1.14

27 May 17:38
v1.14
Compare
Choose a tag to compare

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


scrcpy v1.14

Changes since v1.13:

  • Add --stay-awake (#631)
  • Add Ctrl+Shift+o shortcut to turn screen on (#175)
  • Implement seamless copy-paste from Android to computer (#1056, #1423)
  • Implement seamless UTF-8 copy-paste from computer to Android >= 7 (#786)
  • Improve --show-touches behavior
  • Properly handle Ctrl+C on Windows (avoid to corrupt recording) (#818)
  • Add --verbosity to configure log level at runtime
  • Add --codec-options to pass MediaFormat options directly (#1325)
  • Add --force-adb-forward
  • Apply workarounds only on error (#994)
  • Increase LOD bias to reduce blurring on trilinear filtering (#1394)
  • Fix HiDPI issues on secondary screen (#1408, #15)
  • Fix rendering issues (#1408, #787)
  • Fix window restoration regression (#1346)
  • Fix unexpected focus behavior on scroll (#1362)
  • Fix "buffer full" error on Ctrl+Shift+v (#1425)
  • Upgrade platform-tools to 30.0.0 (adb) in Windows releases

Highlights

Stay awake

A new option has been added to prevent the device to sleep:

scrcpy --stay-awake
scrcpy -w  # short option

This is especially useful when --turn-screen-off/-S is enabled, because the device screen will stay awake (no lock screen to unlock after some delay) with screen off:

scrcpy -Sw  # turn sceen off and stay awake

The initial "stay awake" state is restored when scrcpy is closed. This is the case even on disconnection/unplug (a new mechanism has been implemented to cleanup on disconnection, --show-touches also benefits from it).

Turn screen on

The shortcut to turn the screen back on after --turn-screen-off or Ctrl+o had been removed (8c8649c) due to issues on some devices. Of course, it was still possible to turn it back on using the power button (twice), but it was not very convenient.

Therefore, to turn the screen on, the shortcut Ctrl+Shift+o has been reactivated in this release. In practice, it works on many devices (in fact, I could not reproduce the issue anymore).

Seamless copy-paste

Clipboard synchronization between the Android device and the computer allowed to transfer UTF-8 text, but copy-pasting required an annoying two-steps copy.

Now, you can copy a text on Android (long-press on a text field, then click COPY), and immediately press Ctrl+v on the computer to paste it.

In the other direction, Ctrl+Shift+v, in addition to synchronizing the clipboards, now injects a PASTE command (if the device runs Android >= 7). This preserves UTF-8 text.

Fix HiDPI issues on secondary screen

A rework of the rendering code (#1408) fixes the long-standing issue #15, causing wrong click locations on secondary monitors (especially on macOS).

Properly handle Ctrl+C on Windows

On Windows, Ctrl+C in the terminal just killed the program, without any cleanup. This was particularly annoying while recording, because in that case the resulting file was corrupted (#818).

Pressing Ctrl+C on Windows now quits the app properly (like on the other platforms).

Advanced codec options

A new advanced option has been added to pass any raw option to MediaFormat. This could be used for example to change the profile/level of the codec:

scrcpy --codec-options profile=1,level=4096

See #1226 and #1325.

scrcpy v1.13

29 Apr 21:09
v1.13
Compare
Choose a tag to compare

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


scrcpy v1.13

Changes since v1.12.1:

  • Add option to lock video orientation (#218, #1151)
  • Add shortcuts to rotate the display (#218, #1274)
  • Mirror secondary displays (#397, #898, #1177, #1238)
  • Enable trilinear filtering when possible (#40, #1284)
  • Add --render-driver parameter (#1284)
  • Accept --max-fps before Android 10 (#488)
  • Accept negative window position (#1242)
  • Use another local port if 27183 is not available (#945, #951)
  • Forward NumPad keys when NumLock is disabled (#1188)
  • Fix issues when directory contains non-ASCII chars on Windows (#1002)
  • Do not print irrelevant workarounds errors (#994)
  • Fix possible BufferUnderflowException on touch event (#1245)
  • Upgrade FFmpeg to 4.2.2 in Windows releases
  • Upgrade SDL to 2.0.12 in Windows releases

Highlights

Rotation

The previous release (v1.12) added Ctrl+r to request the device to switch between portrait and landscape.

This release adds two additional rotation features, which do not change the device orientation:

  • an option to lock the video orientation
  • shortcuts to rotate display at any time

Lock video orientation

The parameter --lock-video-orientation changes the mirroring orientation:

scrcpy --lock-video-orientation 0   # natural orientation
scrcpy --lock-video-orientation 1   # 90° counterclockwise
scrcpy --lock-video-orientation 2   # 180°
scrcpy --lock-video-orientation 3   # 90° clockwise

The locked orientation affects the recording, and never changes across the session.

Display rotation

New shortcuts are introduced to rotate the display at any time:

  • Ctrl+ (left) rotates the display 90° counterclockwise
  • Ctrl+ (right) rotates the display 90° clockwise

This affects only the display, not the recording.

The initial value may also be provided on start via --rotation. Possible values are 0, 1, 2 and 3 (having the same meaning as that of --lock-video-orientation).

Multi-display

Some devices may expose secondary displays, like Samsung DeX (#397). To mirror them, a new flag --display has been added:

scrcpy --display 1

Limitations

The secondary display may only be controlled if the device runs at least Android 10 (otherwise it is mirrored in read-only).

Sometimes, mirroring the secondary display just shows a black screen (if some flag called FLAG_SUPPORTS_PROTECTED_BUFFERS is set for the display). There is no known solution for now (see discussions #898 and #1177).

Downscaling quality (trilinear filtering)

If the scrcpy window is far smaller (in pixels) than the Android device, visual quality can be very low (#40, #1284).

To improve the quality, trilinear filtering is enabled when possible (OpenGL 3.0+ or OpenGL ES 2.0+):

mipmaps

(see this comment for more details)

Mipmapping is automatically enabled if the rendering is done by OpenGL 3.0+ or OpenGL ES 2.0+.

On Windows, you may want to force OpenGL (instead of Direct3D) to benefit from this improvement:

scrcpy --render-driver=opengl

On macOS, it is not supported (there is no OpenGL 3.0).

To force-disable mipmaps even on supported versions of OpenGL, use --no-mipmaps.

scrcpy v1.12.1

10 Dec 17:01
v1.12.1
Compare
Choose a tag to compare

Hotfix for v1.12:

  • Fix bit-rate parsing when "long" is 32 bits (#995)

A bug introduced in v1.12 could prevent to set a custom bit-rate (scrcpy -b 12m).

In practice, the bug only happened on the Windows release (compiled with mingw32), and possibly on other 32 bits systems.

scrcpy v1.12

09 Dec 22:50
v1.12
Compare
Choose a tag to compare

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


scrcpy v1.12

Changes since v1.11:

  • Add shortcut (Ctrl+r) to rotate device screen (#11)
  • Respect scrolling configuration on macOS (#966)
  • Initialize Application object (fix crashes on some devices) (#940)
  • Restore the .jar extension on the device (fix crashes on some
    devices) (#944)
  • Inject mouse events with a virtual device id (fix crashes on some
    devices) (#962)
  • Refuse to push server if it points to a directory (#956)

Highlights

This is a small release: one feature and some fixes.

Shortcut to rotate device screen

It is now possible to rotate the device screen (switch between portrait and landscape modes): Ctrl+r.

Note that it rotates only if the application in foreground supports the requested orientation.

Fix natural scrolling

On macOS, the scroll direction can be configured, but was not respected by scrcpy. (#966)

Device crashes fixes

Some changes introduced in v1.10 caused crashes on some devices (#940 and #944, impacting many users). Another bug crashing an Android TV box have been fixed (#962).

scrcpy v1.11

19 Nov 22:53
v1.11
Compare
Choose a tag to compare

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


scrcpy v1.11

Changes since v1.10:

  • Add support for touchscreens/multitouch (#22, #865)
  • Add --max-fps to limit the frame rate (Android 10 only) (#488)
  • Add options to set an initial window size and position (#762)
  • Add option to disable window decorations (#762)
  • Add --prefer-text option (#650)
  • Add manpage
  • Fix copy-paste on Android 10 devices (#796)
  • Fix "turn screen off" on Android 10 devices (#835)
  • Fix clicks not working in some games (#635)
  • Fix device rotation while the window is maximized (#750)
  • Fix scrcpy-noconsole.exe (#691)
  • Fix HiDPI support (#829)
  • Fix segfault on empty file recorded (#918)
  • Fix recorded video to avoid crashes in Adobe Premiere (#702)
  • Fix segfault on recording with old FFmpeg versions (#707)
  • Fix several crashes on some devices (like Meizu) (#240, #365, #921)
  • Upgrade FFmpeg to 4.2.1 in Windows releases
  • Upgrade platform-tools to 29.0.5 (adb) in Windows releases

Highlights

Touchscreen / multitouch

On a computer with a touchscreen, scrcpy now allows to control the device using several fingers, for example to zoom an image or a map.

Android 10

Several features (copy-paste, turn screen off) had been adapted to work on Android 10.

In addition, a new option --max-fps have been added to limit the mirroring frame rate (only works on Android 10). This may help with wireless or remote control (for example over an SSH tunnel).

More devices supported

Some devices (typically Meizu phones) did not work due to crashes in their ROM when running scrcpy. Workarounds have been implemented to make them work.

scrcpy v1.10

04 Aug 20:08
v1.10
Compare
Choose a tag to compare

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


scrcpy v1.10

Changes since v1.9:

  • Reduce latency by 1 frame (#646)
  • Record asynchronously
  • Use Cmd instead of Ctrl for shortcuts on macOS when possible (#642)
  • Add option to set a custom window title (#120, #614)
  • Add option to change the push target (#659)
  • Make --turn-screen-off work for Android Q devices (#586, #587)
  • Prevent to turn screen off if no control (#608)
  • Upgrade FFmpeg to 4.1.4 in Windows releases
  • Upgrade platform-tools to 29.0.2 (adb) in Windows releases
  • Upgrade SDL to 2.0.10 in Windows releases

Highlights

Reduced latency

One major goal of scrcpy is to mirror Android devices with minimal latency.

However, the way the H.264 video stream was parsed by FFmpeg introduced a latency of one frame. As a consequence, a frame was not sent to the decoder before the next one was (partially) received.

In this release, this part has been rewritten so that a frame is decoded as soon as it is received, by taking advantage of the knowledge of packet boundaries on the device side.

As detailed in #646, this effectively reduces the latency by one frame. For example, in 800x448 (-m 800), the end-to-end latency can be as low as one frame (for a video at 30 fps, about ~35ms):

448x800_30fps_lowlatency

Asynchronous recording

Recording the video stream (with scrcpy --record file.mkv) while mirroring consists in muxing, on the computer side, the H.264 packets in an MKV or MP4 container (without reencoding).

For simplicity, this muxing was done by the thread receiving the stream and feeding the decoder. In practice, it worked well enough, but whenever writing the file took too much time (during a blocking I/O call), this delayed the decoding of the following frames.

For maximum performance even when recording is enabled, the recorder now uses a dedicated thread.

macOS shortcuts

Mac users reported that Cmd was more natural than Ctrl for scrcpy shortcuts. Many shortcuts have been changed: see shortcuts.

scrcpy v1.9

11 Jun 20:54
v1.9
Compare
Choose a tag to compare

scrcpy v1.9

Changes since v1.8:

  • Add feature to turn screen off while mirroring (#175)
  • Add device-to-computer clipboard copy (#145)
  • Add computer-to-device clipboard copy (#413)
  • Find scrcpy-server.jar in the correct directory on Windows
  • Fix mouse focus clickthrough
  • Do not minimize the window on focus loss (#554)
  • Disable X11 compositor bypass (#522)
  • Continue text injection on failed character (#509)
  • Bind Home key to MOVE_HOME instead of HOME screen (#555)
  • Do not crash if expanding/collapsing panels is not supported (#506)
  • Do not power on the device if --no-control is set
  • Improve framerate counting
  • Add runtime option to render expired frames (i.e. not skip frames)
  • Downgrade SDL to 2.0.8 in Windows releases (#425)
  • Upgrade FFmpeg to 4.1.3 in Windows releases
  • Upgrade platform-tools to 29.0.1 (adb) in Windows releases

Highlights

Here are some highlights of the changes introduced by scrcpy 1.9.

Turn device screen off

Many users requested to turn the device screen off while mirroring (#145).

It is now possible at any time, by pressing Ctrl+o. To turn it back on, just use the POWER button (or Ctrl+p), once to switch off the (mirrored) device, once again to turn both the physical and mirroring on.

To turn the device screen off on start:

scrcpy --turn-screen-off
scrcpy -S

Copy-paste in both directions

It was already possible to copy-paste from the computer to the Android device (Ctrl+v), by injecting the text character by character (with all the limitations of text injection).

Now, it is also possible to copy the Android device clipboard (Ctrl+c) to paste it on the computer.

In addition, Ctrl+Shift+v allow to copy the computer clipboard to the device, but without pasting it, so that it can then be pasted manually on Android. That way, the clipboard content is not broken by text injection, so it can be used to transmit any text with special characters (an UTF-8 stream).

Windows PATH simplification

On all platforms except Windows, the absolute path of scrcpy-server.jar is hardcoded (typically to /usr/share/scrcpy/scrcpy-server.jar), so it is straightforward to know its path.

On Windows however, the server path may not be constant, so the build is "portable": scrcpy-server.jar is expected to be in the same directory as scrcpy.exe. Concretely, to push the server to the device, scrcpy just executed:

adb push scrcpy-server.jar /data/local/tmp/

The problem is that scrcpy-server.jar is searched in the current directory, which is not necessarily the same as the scrcpy directory. Typically, if you added the scrcpy directory in your PATH to call scrcpy from anywhere, the current directory could be anything. This was very annoying and confusing (you had to set the environment variable SCRCPY_SERVER_PATH as a workaround).

Now, on Windows, the server path will be built based on the scrcpy executable path, so it works out-of-the-box.

Mouse focus clickthrough

When scrcpy doesn't have focus, it needed one click to get focus, and another click to actually "click" on the device.

Mouse focus clickthrough was enabled in earlier versions, but a stupid regression broke it in v1.8. It has been fixed.