{"id":18719873,"url":"https://github.com/zedeus/kinoplex","last_synced_at":"2025-06-27T07:35:19.045Z","repository":{"id":44001620,"uuid":"252917086","full_name":"zedeus/kinoplex","owner":"zedeus","description":"Server and mpv/web client for syncing media playback","archived":false,"fork":false,"pushed_at":"2023-11-13T00:51:35.000Z","size":278,"stargazers_count":31,"open_issues_count":11,"forks_count":7,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-19T14:52:18.378Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zedeus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-04-04T05:28:22.000Z","updated_at":"2025-04-29T10:05:12.000Z","dependencies_parsed_at":"2025-05-19T14:43:55.102Z","dependency_job_id":"47f2ff83-f1c3-47f4-a480-98685d0f99c8","html_url":"https://github.com/zedeus/kinoplex","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zedeus/kinoplex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zedeus%2Fkinoplex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zedeus%2Fkinoplex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zedeus%2Fkinoplex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zedeus%2Fkinoplex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zedeus","download_url":"https://codeload.github.com/zedeus/kinoplex/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zedeus%2Fkinoplex/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262213129,"owners_count":23276052,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T13:28:18.260Z","updated_at":"2025-06-27T07:35:18.989Z","avatar_url":"https://github.com/zedeus.png","language":"Nim","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ｋｉｎｏｐｌｅｘ\n\nKinoplex is a project for syncing media playback, aiming to be a simpler\nreplacement for Syncplay without all the bloat, and without relying on Python.\n\nThe project is comprised of a procotol, server, mpv client, and web client.\nClients targeted at other media players can easily be implemented thanks to the\nsimple JSON protocol. There are no official servers or support for rooms, since\nthe intended use case is syncing playback of videos and music for friend groups\nusing a single shared server. The server hosts a web client, and the mpv client\ncan be configured to connect to the server using a config file.\n\nFor user roles there can be only 1 admin that controls playback, acting as the\nanchor point for syncing time and state. The admin can let other users be\njannies through a command, which gives them access to add URLs to the playlist.\n\n## Build\n\nCompile using Nim 1.4.8 or higher (preferably 1.6.4).\n\nBuild the server (kino_server) and mpv client (kino_mpv):\n\n```bash\nnimble build -d:danger\n```\n\nBuild the web client JavaScript:\n\n```bash\nnimble webclient\n```\n\nTo run the mpv client, make sure you have mpv installed on your system. If\nyou're on Windows or using a custom build, make sure to change `binPath` in the\nconfig file to point to the binary.\n\n### Config\n\nCopy `server.example.conf` to `server.conf` and/or `mpv_client.example.conf` to\n`mpv_client.conf`, ideally in `~/.config/kinoplex` and modify them to your\nneeds. Allowed locations are next to the executable and in\n`~/.config/kinoplex/`. The web client doesn't have a config.\n\n## mpv\n\nmpv's native playlist functionality is used to synchronize the playlist across\nclients. The admin can go back and forth in the playlist without any issues,\nother clients will follow it perfectly. As non-admin pausing and skipping ahead\ndoesn't work, the client constantly syncs time and state to be as close the\nadmin as possible. Chat and server messages are displayed using mpv's built-in\nOSD overlay. If the OSD isn't visible at all, you may have to change your mpv\nconfiguration.\n\n### Keybindings\n\n|                                                   |                                                                         |\n| ------------------------------------------------- | ----------------------------------------------------------------------- |\n| \u003ckbd\u003eEnter\u003c/kbd\u003e                                  | Open chat input, \u003ckbd\u003eEnter\u003c/kbd\u003e again to send and/or exit             |\n| \u003ckbd\u003e/\u003c/kbd\u003e                                      | Open chat input with \"/\" already in the input (convenient for commands) |\n| \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003el\u003c/kbd\u003e                    | Clear chat                                                              |\n| \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eshift\u003c/kbd\u003e + \u003ckbd\u003el\u003c/kbd\u003e | Display recent chat messages                                            |\n| \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eq\u003c/kbd\u003e                    | Fully quit mpv. Normal \u003ckbd\u003eq\u003c/kbd\u003e will restart mpv.                   |\n| \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003ev\u003c/kbd\u003e                    | Add clipboard to playlist (must be admin or janny)                      |\n\n### Commands\n\nPrefix for all commands is `/`. Press \u003ckbd\u003e/\u003c/kbd\u003e to open the chat ready to\ntype a command. The shorthand notation `[c]md` means `/c` is the same as `/cmd`\n\n|               |                                                                                                  |\n| ------------- | ------------------------------------------------------------------------------------------------ |\n| `[u]sers`     | Show list of users in the server                                                                 |\n| `[l]og n`     | Show `n` lines of the chat log. If `n` is empty, it shows 6 lines                                |\n| `[a]dd url`   | Add URL to playlist (admin and janny). \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003ev\u003c/kbd\u003e does the same.             |\n| `[e]mpty`     | Empties the playlist (admin only)                                                                |\n| `[i]ndex n`   | Sets playlist index to `n` (number) (admin only)                                                 |\n| `[j]anny u`   | Grant janny role to user with username `u` (admin only)                                          |\n| `unjanny u`   | Revoke janny role from user with username `u` (admin only)                                       |\n| `[o]pen path` | Replace current file or URL locally. Useful if you have a local copy of something being streamed |\n| `[c]lear`     | Clear chat, same as \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003el\u003c/kbd\u003e                                               |\n| `[r]eload`    | Reload playlist and state. Useful if mpv gets messed up                                          |\n| `rename name` | Change your display name to `name`                                                               |\n| `restart`     | If `reload` isn't enough to fix mpv, try this. Hitting \u003ckbd\u003eq\u003c/kbd\u003e should do the same           |\n| `quit`        | Same as \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eq\u003c/kbd\u003e, fully quit mpv                                           |\n\n## Web\n\nThe web client can be accessed at the server's main path, e.g.\nhttp://localhost:9001/ or https://kinoplex.example.com/\n\nYou're prompted to pick a username, and optionally your password if you're\nadmin. The web client has a chat overlay almost identical to mpv's, visible in\nfullscreen-mode. Press \u003ckbd\u003eEnter\u003c/kbd\u003e to show it, and again to send/close.\n\n[plyr](https://github.com/sampotts/plyr) is used for playback which supports\nYouTube and Vimeo links, as well as video and audio file links. For broadest\nlink support, consider using the mpv client instead since it uses youtube-dl to\nstream from almost any source. mkv files are generally not supported by\nbrowsers, but you can turn it into an m3u8 stream with ffmpeg easily, supported\nby all browsers using hls.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzedeus%2Fkinoplex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzedeus%2Fkinoplex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzedeus%2Fkinoplex/lists"}