Inconsistent video mirroring, and nonsensical dialogs with setVideoMirrorEffect

In using runRenderingContext I am seeing inconsistent results in how the video is or isn’t mirrored. E.g:

  • On a Mac Zoom client (latest version), the canvas is mirrored, but the camera video (rendered via drawParticipant ) is not mirrored
  • On a Windows Zoom client (latest version), nothing seems to be mirrored

When trying to use setVideoMirrorEffect to get a consistent experience, the user receives a dialog "[APP] wants to Use your Camera." This dialog is disruptive and makes no sense as the camera is already being used and all kinds of other rendering context manipulation don’t have similarly annoying dialogs.

Is there any way around this to get a consistent (and positive) user experience?

A little more context after playing with this further:

In the Zoom client Preferences, in the Video section there is a checkbox for “Mirror my video.” When this is checked, both the user’s camera and anything rendered (eg with drawWebView) will be mirrored. For any use case I can think of, this results in the webview looking terrible on the user’s screen (e.g. all text will be rendered backwards).

Calling setVideoMirrorEffect seems to affect mirroring not just temporarily, but actually changes the preference on the Zoom client (this is not at all clear from the documentation). Additionally, it causes a nonsensical popup modal as I mentioned previously. Overall this seems to just result in a poor UX. Some things that would be very helpful:

  • A way to know if a current client is mirrored or not
  • A way to mirror just a webview instead of the entire canvas
  • Removing / avoiding the nonsensical popup

@vandalayindustries ,

Welcome to the Developer Forum! Thank you for sharing this feedback and I am sorry to hear about your experience. I can see how the consent dialog may be impactful to UX. However, it is my understanding that the consent dialogue is expected behavior. I do not believe there is any way to get around the popup as consent dialogs are security features. That aside, I will work with the documentation to note that the client will subsequently show the consent dialog when calling setVideoMirrorEffect and add a note that it changes the Zoom desktop client preference as well.

Have you ruled out the default native camera settings as the root cause? It looks like Mac implicitly mirrors camera, so that might actually be a native macOS camera setting issue and not a zoom SDK issue.

Currently, there are no Zoom Apps mirrored events. However, we always looking for ways to improve the developer experience so please feel welcome to share your use case for future consideration here: Feedback - Zoom

I checked internally and it looks like it is not impossible to mirror just a webview instead of the entire canvas – but it is a hefty development lift. You would have to couple zoom apps information (which layer is the WebView) inside the zVideo module where it loops through all the layers to mirror or unmirror them.

Hi @donte.zoom thanks for the detailed reply. Just a few follow up notes of seemingly low hanging fruit:

Currently, there are no Zoom Apps mirrored events.

Would be helpful to have this come along with the config information. Use case: anyone looking to render any sort of text will want to know if it’s mirrored or not, and avoid using a nonsensical consent dialogue if it’s not needed.

the consent dialogue is expected behavior. I do not believe there is any way to get around the popup as consent dialogs are security features.

The current dialog says “[App Name] wants to Use your camera.” This is not at all accurate…what is actually happening is [App Name] is changing your video mirroring preference to [on/off]." If security is of importance, you probably want to deliver an accurate message of what the user is consenting to.


Thanks for raising this issue about detecting the state of the video mirror effect of the user! This does look like a gap in our API. We will discuss internally, but will likely plan to add additional endpoints to retrieve the state of the video mirror setting. Unfortunately, this new endpoint may have to wait for a couple monthly releases before it is on production.

Thanks for chiming in @leon.cheng!

You raised great points about the video mirror effect of the user, @vandalayindustries! As shared, this topic will be discussed internally. In the meantime, please do let us know of any other requests you might have now—we’re here to listen! Also, you can stay up-to-date with any new or upcoming features by following our changelog and upcoming changes pages.

Thanks again for taking the time to talk to us! We always appreciate feedback and suggestions.

Thanks @leon.cheng and @donte.zoom , glad this made it through to the right folks. I will stay on the lookout for updates.


You’re welcome, @vandalayindustries! We appreciate your feedback and it does not go unnoticed. It is valuable information for our whole team, so please do not hesitate to reach out with any further comments or questions.

@donte.zoom @leon.cheng I would like to echo the need for being able to tell if a user has their camera mirrored or not.

The use case we need it for is using the Layers API to overlay content. Currently if the user has the video mirrored then the overlay content will appear flipped backwards which is a poor user experience.

If we had a property in the config object or a getUserVideoMirrorState() call that would indicate if the user’s video is mirrored, I could apply a CSS transform on the camera webview body where appropriate so that the content would always be the correct orientation.