utsuru 0.1.0

A WebRTC utility for forwarding track packets from a single source to multiple mirrors.
Documentation
# ![Icon of utsuru][icon-image] utsuru

[![License][license-image]][license-url]
[![CI][ci-image]][ci-url]
[![Crates.io][cratesio-image]][cratesio-url]
[![Deps.rs][depsrs-image]][depsrs-url]
[![Discord][discord-image]][discord-url]

![A screenshot of utsuru's Web UI][webui-image]

- [Overview]#overview
- [Features]#features
- [Installation]#installation
- [CLI]#cli
- [Getting started]#getting-started
- [Adapters]#adapters
- [Join us]#join-us
- [License]#license

[icon-image]: https://github.com/user-attachments/assets/e0e13ed6-0b14-42b2-a5b9-25a369d0cd1d
[license-image]: https://img.shields.io/badge/License-MIT-yellow.svg
[license-url]: https://opensource.org/licenses/MIT
[ci-image]: https://github.com/VincentVerdynanta/utsuru/workflows/CI/badge.svg
[ci-url]: https://github.com/VincentVerdynanta/utsuru/actions
[cratesio-image]: https://img.shields.io/crates/v/utsuru.svg
[cratesio-url]: https://crates.io/crates/utsuru
[depsrs-image]: https://deps.rs/repo/github/VincentVerdynanta/utsuru/status.svg
[depsrs-url]: https://deps.rs/repo/github/VincentVerdynanta/utsuru
[discord-image]: https://img.shields.io/discord/1381377249923567707?logo=discord
[discord-url]: https://discord.gg/PcdC8Jk8ef
[webui-image]: https://github.com/user-attachments/assets/8bc95337-8353-4188-b2a6-8af08166ff70

## Overview

utsuru is a WebRTC utility that accepts track packets from a single
source and forwards it to multiple mirrors.

Some situations you might want to use utsuru include:

* You want to broadcast to Discord without being limited to screen sharing.
* You want to broadcast a single feed to multiple Discord calls simultaneously.
* You want to use OBS to broadcast to a WebRTC remote peer that does not provide a WHIP endpoint.

## Features

* Portable and lightweight:
  * The entire application fits in a single binary.
  * Minimal CPU and memory footprint.
* Web UI and REST API for managing mirrors.
* Track packets are sent from source to mirrors as is, no transcoding.
* Discord Live is implemented using the WebRTC protocol (same as Discord web client).

## Installation

### With cargo

```text
$ cargo install utsuru
```

### Binaries on Windows, Linux, and macOS

You can download prebuilt utsuru from [Github Releases][gh-releases-url].

[gh-releases-url]: https://github.com/VincentVerdynanta/utsuru/releases

## CLI

```text
Usage: utsuru [OPTIONS]

Options:
  -h, --host <host>                Specify bind address [default: 127.0.0.1]
  -p, --port <port>                Specify port to listen on [default: 3000]
  -v, --verbosity <verbosity>      Log verbosity [default: off]
      --completions <completions>  Print shell completion script for <shell> [possible values: bash, elvish, fish, powershell, zsh]
      --help                       Print help
  -V, --version                    Print version
```

## Getting started

See [`docs/getting-started.md`][getting-started] for basic usage.

[getting-started]: ./docs/getting-started.md

## Adapters

### Mirrors

- [X] Discord Live

### Sources

- [X] WHIP

### Video codecs

- [X] H.264
- [ ] H.265
- [ ] VP8
- [ ] VP9
- [ ] AV1

## Join us

Thanks for your involvement in developing this project! We are so happy to
have you! To get started, don't hesitate to check our

* **[Discord][discord-url]:** utsuru's official Discord server.

### Code of Conduct

This project has adopted the Rust Code of Conduct. Please check
[`CODE_OF_CONDUCT.md`][code-of-conduct] for more details.

The entire utsuru community is expected to abide by the
code of conduct when contributing or participating in discussions.

[code-of-conduct]: ./CODE_OF_CONDUCT.md

## License

This project is licensed under the MIT License - see the [`LICENSE`] file
for details.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally
submitted for inclusion in utsuru by you, shall be licensed as MIT,
without any additional terms or conditions.

[`LICENSE`]: ./LICENSE