- Rust 96.4%
- Shell 2.6%
- Dockerfile 1%
|
Some checks failed
ci / check (push) Has been cancelled
release / create (push) Has been cancelled
release / build (aarch64-apple-darwin) (push) Has been cancelled
release / build (aarch64-pc-windows-gnullvm) (push) Has been cancelled
release / build (aarch64-unknown-linux-musl) (push) Has been cancelled
release / build (powerpc64le-unknown-linux-musl) (push) Has been cancelled
release / build (riscv64gc-unknown-linux-musl) (push) Has been cancelled
release / build (x86_64-apple-darwin) (push) Has been cancelled
release / build (x86_64-pc-windows-gnu) (push) Has been cancelled
release / build (x86_64-unknown-linux-musl) (push) Has been cancelled
release / publish (push) Has been cancelled
release / docker (push) Has been cancelled
Separate server and client binaries with iroh networking. Files local to a client are streamed to the room over iroh-blobs and swarmed between peers, with subtitles. Shared playlists with background preloading, buffered catch-up for lagging clients, session takeover and automatic reconnects. Forgejo CI and release workflows and a multi-arch server image. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .forgejo | ||
| crates | ||
| .dockerignore | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| Dockerfile | ||
| LICENSE | ||
| PROTOCOL.md | ||
| README.md | ||
Renasync
Watch videos together, wherever you are. Renasync keeps everyone's mpv player in sync: when one person pauses, seeks or opens something, everyone else follows. There's a chat on top of the video too.
You don't all need a copy of the file. Open a video from your own computer and everyone else streams it directly from you, and can start watching and seeking right away.
What you need
- mpv installed and on your
PATH- macOS:
brew install mpv - Windows: mpv.io/installation, or
scoop install mpv - Linux: your package manager, e.g.
apt install mpv
- macOS:
- The renasync download for your system from the releases page
- The server id of the server you're joining (ask whoever runs it)
| System | Download |
|---|---|
| Windows (most PCs) | x86_64-pc-windows-gnu.zip |
| Windows on ARM | aarch64-pc-windows-gnullvm.zip |
| macOS, Apple Silicon (M1 and up) | aarch64-apple-darwin.tar.gz |
| macOS, Intel | x86_64-apple-darwin.tar.gz |
| Linux, x86-64 | x86_64-unknown-linux-musl.tar.gz |
| Linux, ARM64 (Raspberry Pi 4/5) | aarch64-unknown-linux-musl.tar.gz |
| Linux, RISC-V 64 | riscv64gc-unknown-linux-musl.tar.gz |
| Linux, POWER8 and newer (ppc64le) | powerpc64le-unknown-linux-musl.tar.gz |
macOS: the binaries are not notarized by Apple. If macOS refuses to open them, run
xattr -d com.apple.quarantine renasync-clientonce.
Watching together
Start the client and answer its questions:
renasync-client
Choose server id: aff5d2d2...
Choose room name: movie-night
Choose user name: alice
Or pass everything at once:
renasync-client --server aff5d2d2... --room movie-night --name alice
An mpv window opens. Everyone who joins the same room on the same server watches together.
- Open a video: press
'and typeloadfilefollowed by a path or URL, or just drag a file onto the mpv window. Everyone in the room loads it too. - Pause, seek, skip: use mpv as usual; everyone follows you.
- Joining late: the client automatically loads what the others are watching and jumps to the right spot.
Keys
| Key | Action |
|---|---|
ENTER |
Chat |
TAB |
Show who is online |
' |
Open a file or URL |
: |
Ignore links opened by other people |
Chat commands
| Command | What it does |
|---|---|
/queue FILE-OR-URL ... |
Add one or more things to the room's playlist |
/playlist |
Show the playlist |
/next |
Skip to the next item in the playlist |
/unqueue NUMBER |
Remove an item from the playlist |
/privmsg USER MESSAGE |
Send a private message |
/loadto USER FILE-OR-URL |
Make one person load something (local files are shared) |
/loadfrom USER |
Load whatever that person is watching |
Sharing your own files
When you open a file from your computer, Renasync prepares it for sharing (this takes a moment for big files, it's read but never copied) and tells the room. The others stream it from you, verified piece by piece so a broken connection can never corrupt it.
- Subtitles come along. Subtitle files next to the video
(
Movie.srt,Movie.en.srt, ...) are shared too, with their language, so everyone gets the same subtitle choices you have. Dropped a subtitle onto mpv halfway through? Everyone else gets it as well. - Everyone helps: people who already have (parts of) a file pass them on, and your client fetches from whoever is fastest for you.
- Keep your client running while others watch something you shared.
- If someone already has a file with the same name and size in the folder they started Renasync from, they play their own copy instead.
Playlists and preloading
Queue up the next episodes with /queue:
/queue "Show S01E02.mkv" "Show S01E03.mkv"
While you watch, everyone's client quietly downloads the current video
completely and then the next ones in the playlist, so the next episode starts
instantly, even for friends on the other side of the world. Press TAB to
see how far everyone has come. When a video ends, the next one starts for the
whole room.
Bad connections
Renasync is built to cope with flaky networks:
- If your video stalls or you fall behind, you don't hold up the room. Your player jumps a little ahead, buffers there, and rejoins at exactly the right moment. On a slow line it gives itself more headroom next time.
- If your connection drops, the client reconnects on its own and catches up with the room. mpv keeps playing in the meantime.
- If your old connection is still "hanging" on the server when you come back, your new one simply takes over: your name is tied to your computer, so you never get locked out of it.
- If someone else already uses your name, you join as
name2. - Connections go directly between computers when possible, and through a relay when firewalls are in the way.
Extra mpv options
Anything after -- goes to mpv:
renasync-client --server ... --room ... --name ... -- --fullscreen --volume=50
Your normal mpv config (mpv.conf, input.conf, scripts) is used as usual.
Running a server
The server is tiny: it only relays chat and playback commands, video never passes through it. It doesn't need an open port, a domain name or a certificate, so it runs fine behind home routers and NAT.
renasync-server
It prints the server id to share with your friends:
Server running. Clients can join with:
renasync-client --server aff5d2d20a38e9917cf50d6470e9d9c045a170fa9cc1a7e6142fc713d3db2699
The id is derived from renasync-server.key, created on first start. Keep
that file and the id stays the same; delete it and you get a new one.
Docker
docker run -d --name renasync --restart unless-stopped \
-v renasync:/data \
code.lowsec.club/okawari/renasync-server:latest
docker logs renasync # shows the server id
Images are available for amd64, arm64, riscv64 and ppc64le. The key
is stored in the /data volume.
Building from source
Requires Rust 1.91 or newer:
cargo build --release
The binaries end up in target/release/. See PROTOCOL.md for
how it works on the wire.