Skip to content

Repository files navigation


venmic - screenshare support for pipewire

Warning

This project is not intended for standalone usage. You need a modified discord client that makes use of this.

🐛 Bug Reports / Debugging

Important

Please read this before submitting an issue report!

When reporting an issue please make sure to set the environment variable VENMIC_ENABLE_LOG.
If said variable is set venmic will output a lot of useful information to a log-file. You can find the log in either:

  • ~/.local/state/venmic/venmic.log
  • ${XDG_STATE_HOME}/venmic/venmic.log

It is highly recommended to include this log file in your issue report otherwise we may not be able to help you!
Alternatively, you can also set the environment variable VENMIC_LOG_LEVEL to 1 before starting Vesktop - venmic will then print more logs to the terminal.

🏗️ Compiling

  • Rest-Server

    git clone https://github.com/Vencord/venmic && cd venmic 
    cmake -B build && cmake --build build
  • Node-Addon

    git clone https://github.com/Vencord/venmic && cd venmic
    pnpm install

📖 Usage

venmic can be used as node-module or as a local rest-server.

The node-module is mainly intended for internal usage by Vesktop. For a usage example, see the following Vesktop source files:

The Rest-Server exposes three simple endpoints

  • (POST) /list

    List all available applications to share.
    You can optionally define a JSON-Body containing all the props the listed nodes should have (i.e. ["node.name"]).

  • (POST) /link

    Expects a JSON-Body in the following form:
    {
      "include": 
      [
        { "node.name": "Firefox" }
      ],
      "exclude":
      [
        { "node.name": "Chrome" }
      ],
      "ignore_devices": true,
      "workaround": [{ "node.name": "Chrome" }]
    }

    Depending on wether or not include or exclude are defined the behavior will change:

    • only include
      • Links nodes that match given props
    • only exclude
      • Links nodes that do not match given props
    • both include and exclude
      • Links all applications that match props in include and not those given in exclude

    The setting ignore_devices is optional and will default to true.
    When enabled it will prevent hardware-devices like speakers and microphones from being linked to the virtual microphone.

    The setting mute is optional and will default to true.
    When enabled the virtual microphone wll be muted by default. The user is responsible for unmuting it by calling /unmute.

    The setting only_speakers is optional and will default to true.
    When enabled it will prevent linking against nodes that don't play to a speaker.

    The setting only_default_speakers is optional and will default to true.
    When enabled it will prevent linking against nodes that don't play to the default speaker.

    The setting workaround is also optional and will default to an empty array.
    When set, venmic will redirect the first node that matches all of the specified properties to itself.

  • (GET) /unlink

    Unlinks the currently linked application

  • (GET) /unmute

    Unmutes the virtual microphone

🤝 Acknowledgements

Kudos to all the developers involved, keep up the great work!

About

linux audio screenshare for discord (or any electron app) via pipewire

Resources

Stars

111 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages