AI prompts
base on A screen-sharing / remote collaboration software written in Rust
<!-- PROJECT LOGO -->
<br />
<div align="center">
<a href="https://github.com/mira-screen-share/sharer">
<img src="resources/logo.png" alt="Logo">
</a>
<h3 align="center">Mira Screenshare</h3>
<p align="center">
A high-performance screen-sharing / remote collaboration software written in Rust.
</p>
</div>
<div align="center">
[![Rust][rust-shield]][github-url]
[![Stargazers][stars-shield]][stars-url]
[![MIT License][license-shield]][license-url]
</div>
## Introduction
<div align="center">
[![Screenshot]][github-url]
</div>
Currently this project is completely free and open-source. We have hosted a TURN server and a signalling server for public use, though we cannot make any guarantees about their availability or performance.
The viewer client is available at [mirashare.app][viewer-page].
You may also choose to host your own viewer and signalling server so everything is under your control.
At this stage, we do not recommend using it for any sensitive or mission-critical applications. Contributions are welcome.
## Downloads
Pre-compiled binaries for macOS (aarch64 / x86-64) and Windows are available for download at the [releases page][release-url].
## Features
* High performance screen capturing and streaming
* Remote mouse and keyboard control
* System audio capturing
* Cross-platform (macOS, Windows)
* Concurrent viewers support
## Performance
* 60 FPS encoding at 4K resolution
* 110 ms E2E latency
## Technical Details
Mira is built on top of [the WebRTC stack][webrtc], and consists of three parts, namely the sharer
client, the viewer client, and the signalling server.
* The [sharer client][github-url] will be responsible for capturing
and streaming the screen directly to the viewer(s) through a P2P connection.
- if your Internet environment does not permit such a P2P connection to be established, a TURN server is required to relay the data.
* The [viewer][viewer-url] can dispatch
input (e.g. keyboard, mouse events) to the sharer to achieve control of the sharer's operating system.
* The [signalling server][signaller-url] is reponsible for peer discovery and initial connection negotiations.
For screen capturing, we use `Windows.Graphics.Capture` on Windows, and `ScreenCaptureKit` on macOS. This requires at least Windows 10 v1803 and macOS 13.0.
For encoding, by default x264 is used, however you can use other codecs/encoder or adjust its settings (quality, speed, compression, etc.) in the configuration file, `config.toml` (`~/Library/Application Support/Mira-Sharer/config.toml` for macOS).
## Q & A
Q. Can you see my screens?
A. No, we cannot see your screens. In an ideal environment, the data is transmitted directly from the sharer to the viewer(s), and the signaller is only used for initial connection negotiation. We do not have access to the data.
Even when a direct connection cannot be established, the data is relayed through a TURN server, and is encrypted with the WebRTC stack (e.g. Secure Real Time Protocol (SRTP)).
However, if you are still concerned, you could host your own signalling server and TURN server, and use the viewer client from the source code.
Q. Do you collect any data from me?
A. The signalling server we host does collect some metrics such as the number/length of sessions and the number of unique users estimated through your hashed IP address (salted and hashed with argon2). However, we do not collect any personal data. We do not have access to the data transmitted between the sharer and the viewer(s).
## Build
You need to have ffmpeg installed.
* For macOS, you could use `brew install ffmpeg@5` (later versions will not compile).
* You will also need to `cargo install apple-bindgen` and run `apple-bindgen CoreFoundation --sdk macosx`
* For Windows, you need to download ffmpeg from [here](https://github.com/BtbN/FFmpeg-Builds/releases).
Make sure you download a shared library build such as `ffmpeg-master-latest-win64-gpl-shared.zip`.
Put it under `.\third_party\ffmpeg` so you have e.g. `.\third_party\ffmpeg\bin\ffmpeg.exe`.
Then copy over all dlls under `ffmpeg\bin` to `.` (working directory).
Then, simply run `cargo run --release`.
## Configure
Configuration file is by default `config.toml`. There are preset configs in `configs/` directory that you could use
as a starting point.
For macOS, the configuration file is located at `~/Library/Application Support/Mira-Sharer/config.toml`.
## License
GPLv3
Note that files under `src/capture/macos` are also dual-licensed under MIT.
## Attributions
* Some code is adapted from [scrap](https://github.com/quadrupleslap/scrap), which is licensed under the MIT license.
* Some code from [MirrorX](https://github.com/MirrorX-Desktop/MirrorX), licensed under GPLv3.
[release-url]: https://github.com/mira-screen-share/sharer/releases
[webrtc]: https://webrtc.org/
[screenshot]: resources/screenshot.png
[github-url]: https://github.com/mira-screen-share/sharer
[viewer-url]: https://github.com/mira-screen-share/viewer
[signaller-url]: https://github.com/mira-screen-share/signaller
[viewer-page]: https://mirashare.app/
[rust-shield]: https://img.shields.io/badge/Lang-Rust-EF7B3C?style=for-the-badge
[stars-shield]: https://img.shields.io/github/stars/mira-screen-share/sharer?style=for-the-badge
[stars-url]: https://github.com/mira-screen-share/sharer/stargazers
[license-shield]: https://img.shields.io/github/license/mira-screen-share/sharer.svg?style=for-the-badge
[license-url]: https://github.com/mira-screen-share/sharer/blob/master/LICENSE.txt
", Assign "at most 3 tags" to the expected json: {"id":"7673","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"