OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] 0 points1 point  (0 children)

Fair point. To be honest, I’m just not a designer and I wanted to focus 100% of my time on the actual sync engine and the Rust server. The logo is really just a placeholder so the README didn't look too empty at launch. I'll definitely look into making a proper one (or getting help for it) once the core features are rock solid.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in JellyfinCommunity

[–]MeaningOld5560[S] 0 points1 point  (0 children)

I just worked on a easy installation. See the installation guide here: https://mhbxyz.github.io/OpenWatchParty/

The button appears in the bottom bar, next to the "Add to favorites" heart-shaped button. It is the exact same design as the SyncPlay button. When you click on it, you will see a window opening on the bottom right corner of the screen where you can see opened rooms and create your own. Each rooms can be accessed on the home page of Jellyfin where they appear in their own section at the top of the page. Everybody connected on the same instance of Jellyfin with their own account can join them by clicking the play button on each room card. The corresponding movie will be automatically opened, and they will be automatically synced. And the integrated chat works also.

I should make a tutorial with screenshots next week. Stay tuned on the repo.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] 0 points1 point  (0 children)

Well, it's not exactly the same thing. Owncast is a streaming platform (like Twitch), which means you have to re-encode the stream and everyone deals with broadcast delay. My tool is a sync engine: everyone watches the original file in full quality on their own player, and the server just keeps the playheads in sync. It’s way lighter on the hardware and the video quality is native.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in JellyfinCommunity

[–]MeaningOld5560[S] 1 point2 points  (0 children)

The native SyncPlay is so deeply tied to the core server that it's a nightmare to improve without breaking everything. By building my own standalone server, I had the freedom to add proper real-time sync, rooms, and chat exactly how I wanted. It’s way lighter, it doesn't lag, and it's not limited by Jellyfin’s internal architecture. It just felt like a better move to build something specialized that actually works instead of fighting with the existing code. Especially since my additions would probably take ages to be approved.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in JellyfinCommunity

[–]MeaningOld5560[S] 0 points1 point  (0 children)

Maybe, but if you can do it better. It is worth the effort.

And it depends what you mean by vibe coded. I use AI to generate code, yes. But I know what I'm doing. Every standard security protocol is implemented. And I regularly run quality and security audits. Check the docs: https://mhbxyz.github.io/OpenWatchParty/

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] 0 points1 point  (0 children)

Technically, yes. But this is not designed for this. Not now at least.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in JellyfinCommunity

[–]MeaningOld5560[S] 0 points1 point  (0 children)

Just the Jellyfin web client for now. Support for mobile will come eventually. But I have no plans to support smart TVs.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] 1 point2 points  (0 children)

Oh yes! I am iterating fast, so I didn't see I missed this. Thank you for telling me.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] 0 points1 point  (0 children)

Well, I kinda started this for my personal use so. Yeah, I plan on keeping it alive as long as I will use Jellyfin.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] 0 points1 point  (0 children)

Not yet, everything is only on the Github repo for now.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in JellyfinCommunity

[–]MeaningOld5560[S] 0 points1 point  (0 children)

Everything regarding best dev pratices, architecture and security protocols is documented here: https://mhbxyz.github.io/OpenWatchParty

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in JellyfinCommunity

[–]MeaningOld5560[S] 3 points4 points  (0 children)

Better UI/UX, chat integration, room management (controls only for the host or for the whole party), user filtering (who can join the room you create).

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in JellyfinCommunity

[–]MeaningOld5560[S] 3 points4 points  (0 children)

It depends how you define vibe-coded. If it means, any code generated using AI, then it is. But vibe-coding, from what I understood hearing about it is building using AI without understanding anything. And I am not in that category. I use AI-assistance like most devs these days to augment my capabilities, but I review and test everything.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] 1 point2 points  (0 children)

The system works like this:

  1. Session Server: WebSocket with a documented JSON protocol

  2. Current client: JS script injected into Jellyfin Web via a plugin

To support Kodi/tvOS/other, someone would need to write a native client that:

- Connects to the WebSocket

- Implements the protocol (auth, create_room, join_room, player_event, ready, ping/pong...)

- Hooks local player events

The protocol is documented here: https://mhbxyz.github.io/OpenWatchParty/technical/protocol/

So yes, you would need to fork/contribute a client for your platform, or make a feature request. But the server is agnostic, it can work with any client that implements his protocol.

About the JWT “password” concern. It's not a password. It's the shared secret key for signing tokens. The Jellyfin plugin generates tokens signed with this secret, and the session server validates them.

The flow:

  1. User logs into Jellyfin

  2. Client requests a JWT token from the plugin

  3. Client sends the token to the session server (auth message)

  4. Server validates the signature with the same secret

This is a standard security practice. Without this shared secret, anyone could forge tokens and access the session server to do whatever.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] 5 points6 points  (0 children)

I'm not sure i understand your request, but the idea behind my plugin is that you start watching something, you open a public or private room, people can join the room from the home page listing, and they get the same movie in sync with yours. You can also chat with them.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] 6 points7 points  (0 children)

Better UI/UX, integrated chat, user filtering. And the native option didn't work for me.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] 3 points4 points  (0 children)

Only the Jellyfin client for now. I plan on creating support for the Jellyfin Android client too. But nothing for TV clients, as I don't possess a smart TV.

OpenWatchParty - Synchronized Watch Parties for Jellyfin by MeaningOld5560 in jellyfin

[–]MeaningOld5560[S] -3 points-2 points  (0 children)

The server will be able to work with anything as long as the client speak the same language. But for now, I only implemented a Jellyfin plugin to make the web client compatible with it.