@kangsicj/nexussync 0.0.0-stage → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +138 -2
- package/assets/icon.svg +22 -0
- package/dist/NexusSync.meta.js +36 -0
- package/dist/NexusSync.user.js +10854 -0
- package/package.json +37 -4
package/README.md
CHANGED
|
@@ -1,3 +1,139 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<img src=".github/assets/banner.svg" alt="NexusSync — watch together, perfectly in sync" width="100%">
|
|
4
|
+
|
|
5
|
+
<br>
|
|
6
|
+
|
|
7
|
+
[](./CHANGELOG.md)
|
|
8
|
+
[](https://www.tampermonkey.net/)
|
|
9
|
+
[](https://apps.apple.com/app/userscripts/id1463298887)
|
|
10
|
+
[](https://fairy.hada.io/@jinny)
|
|
11
|
+
|
|
12
|
+
### Miles apart, same frame.
|
|
13
|
+
|
|
14
|
+
**NexusSync turns any web video into a shared movie night.**<br>
|
|
15
|
+
Press play on your phone — it plays on theirs. Pause to laugh — everyone pauses with you.
|
|
16
|
+
|
|
17
|
+
[Features](#-what-it-feels-like) · [Install](#-install) · [Quick start](#-start-in-30-seconds) · [Support](#-support) · [**한국어**](./README_ko.md)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 🍿 What it feels like
|
|
24
|
+
|
|
25
|
+
<table>
|
|
26
|
+
<tr>
|
|
27
|
+
<td width="50%" valign="top">
|
|
28
|
+
|
|
29
|
+
### 🎬 Truly together, down to the frame
|
|
30
|
+
Anyone can play, pause, seek or change speed — and every screen follows within a blink. Devices keep fine-tuning in the background so lips and laughter line up, even between a PC, an iPad and a phone. Bluetooth headphones lagging? Nudge your own device delay in a second.
|
|
31
|
+
|
|
32
|
+
</td>
|
|
33
|
+
<td width="50%" valign="top">
|
|
34
|
+
|
|
35
|
+
### 🍿 A cinema on any site
|
|
36
|
+
One tap and the player fills the screen with clean, beautiful controls, a soft ambient glow and the site's subtitles drawn crisply on top. In landscape on a phone, slide the left edge for **brightness** and the right edge for **volume** — just like your favourite video app.
|
|
37
|
+
|
|
38
|
+
</td>
|
|
39
|
+
</tr>
|
|
40
|
+
<tr>
|
|
41
|
+
<td valign="top">
|
|
42
|
+
|
|
43
|
+
### 💬 Talk without leaving the movie
|
|
44
|
+
Messages float up as speech bubbles and drift away on their own. Tap one to answer, or fire off a quick reply — offered in **your** language — and messages from friends abroad are translated for you automatically — in the bubbles and in the full chat.
|
|
45
|
+
|
|
46
|
+
</td>
|
|
47
|
+
<td valign="top">
|
|
48
|
+
|
|
49
|
+
### 🙈 A curtain for the scary bits
|
|
50
|
+
Watching with kids? One tap gently covers the picture on **every** screen for a few seconds while sound and subtitles carry on. NexusSync remembers the scene, so it is covered again if you rewind or rewatch.
|
|
51
|
+
|
|
52
|
+
</td>
|
|
53
|
+
</tr>
|
|
54
|
+
<tr>
|
|
55
|
+
<td valign="top">
|
|
56
|
+
|
|
57
|
+
### 🖍️ Point, doodle, react
|
|
58
|
+
Draw a quick circle around that actor and it glows on everyone's screen — on the exact same spot of the picture — then fades away. Burst emoji reactions from the edges, send a 💗 nudge, or start a 3-2-1 countdown together.
|
|
59
|
+
|
|
60
|
+
</td>
|
|
61
|
+
<td valign="top">
|
|
62
|
+
|
|
63
|
+
### 🧠 Live AI subtitles
|
|
64
|
+
No subtitles on that video? Turn on live speech recognition with translation into your language, with a glossary for names and terms so characters are always spelled right.
|
|
65
|
+
|
|
66
|
+
</td>
|
|
67
|
+
</tr>
|
|
68
|
+
</table>
|
|
69
|
+
|
|
70
|
+
## ✨ Little things that matter
|
|
71
|
+
|
|
72
|
+
- **Next episode, together** — move on to the next episode and you stay in the room; friends follow with one tap.
|
|
73
|
+
- **Make it yours** — pick your name and colour; your bubbles and doodles wear it on every screen.
|
|
74
|
+
- **Calm, never jumpy** — phones going to sleep, slow Wi-Fi or a player restarting on its own never pause the whole room.
|
|
75
|
+
- **No accidental pauses** — tapping the chat, a doodle or a reaction never nudges the video for anyone.
|
|
76
|
+
- **Invisible until needed** — the ⚙️ button appears only next to real videos, never on ordinary pages.
|
|
77
|
+
- **Private rooms** — everything you share in a room is end-to-end encrypted; only people with the PIN can join.
|
|
78
|
+
|
|
79
|
+
## 📦 Install
|
|
80
|
+
|
|
81
|
+
<div align="center">
|
|
82
|
+
|
|
83
|
+
<img src="assets/icon.svg" width="88" alt="NexusSync icon">
|
|
84
|
+
|
|
85
|
+
### [⬇️ Install NexusSync](https://cdn.jsdelivr.net/npm/@kangsicj/nexussync@latest/dist/NexusSync.user.js)
|
|
86
|
+
|
|
87
|
+
<sub>Opens the install page of your userscript manager · updates arrive automatically</sub>
|
|
88
|
+
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
| Device | App | How |
|
|
92
|
+
| --- | --- | --- |
|
|
93
|
+
| 🖥️ Windows · macOS · Linux | [Tampermonkey](https://www.tampermonkey.net/) | Click **Install NexusSync** and confirm. |
|
|
94
|
+
| 📱 iPhone · iPad | [Userscripts](https://apps.apple.com/app/userscripts/id1463298887) for Safari | Open the install link in Safari and tap **Install**. |
|
|
95
|
+
| 🤖 Android | Tampermonkey (Firefox, Edge, Kiwi …) | Same as desktop. |
|
|
96
|
+
|
|
97
|
+
> [!TIP]
|
|
98
|
+
> Keep every device in a room on the **same version** for the smoothest experience.
|
|
99
|
+
|
|
100
|
+
## 🚀 Start in 30 seconds
|
|
101
|
+
|
|
102
|
+
1. Open the same video on each device and tap **⚙️ → 🔗 Connect**.
|
|
103
|
+
2. One person taps **Create a room** and shares the 6-digit **PIN**.
|
|
104
|
+
3. Everyone else types the PIN. Done — enjoy the show together.
|
|
105
|
+
|
|
106
|
+
<details>
|
|
107
|
+
<summary><b>⌨️ Keyboard shortcuts</b></summary>
|
|
108
|
+
|
|
109
|
+
| Keys | Action |
|
|
110
|
+
| --- | --- |
|
|
111
|
+
| <kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>C</kbd> | Cinema mode |
|
|
112
|
+
| <kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>T</kbd> | AI subtitles |
|
|
113
|
+
| <kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>H</kbd> · <kbd>H</kbd> in cinema | Cover the picture for everyone |
|
|
114
|
+
| <kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>N</kbd> | Open the menu |
|
|
115
|
+
| <kbd>Enter</kbd> | Chat bubble box (in a room) |
|
|
116
|
+
| <kbd>Space</kbd> / <kbd>K</kbd> | Play / pause (cinema) |
|
|
117
|
+
| <kbd>←</kbd> <kbd>→</kbd> · <kbd>J</kbd> <kbd>L</kbd> | Seek 5 s · 10 s |
|
|
118
|
+
| <kbd>↑</kbd> <kbd>↓</kbd> · <kbd>M</kbd> | Volume · mute |
|
|
119
|
+
| <kbd>F</kbd> · <kbd>Z</kbd> · <kbd>C</kbd> · <kbd>?</kbd> | Fullscreen · fit · subtitles · help |
|
|
120
|
+
|
|
121
|
+
On touch screens: tap for controls, double-tap a side to skip, drag sideways to scrub, long-press to point, and in landscape slide the edges for brightness and volume.
|
|
122
|
+
|
|
123
|
+
</details>
|
|
124
|
+
|
|
125
|
+
## 🔐 Your privacy
|
|
126
|
+
|
|
127
|
+
- Room messages are encrypted on your device; only people in the room can read them.
|
|
128
|
+
- If you add your own AI key for subtitles, it stays in your userscript manager and goes only to that provider.
|
|
129
|
+
- NexusSync never collects personal data, and rooms are cleaned up automatically after everyone leaves.
|
|
130
|
+
|
|
131
|
+
## 💖 Support
|
|
132
|
+
|
|
133
|
+
NexusSync is made with love in spare time. If it makes your movie nights a little warmer, you can buy the developer a coffee on **Fairy** — it keeps the servers running and the features coming.
|
|
134
|
+
|
|
135
|
+
<a href="https://fairy.hada.io/@jinny"><img src="https://img.shields.io/badge/%F0%9F%A7%9A%20Support%20on%20Fairy-FF6FB5?style=for-the-badge" alt="Support on Fairy"></a>
|
|
136
|
+
|
|
137
|
+
<sub>Maintainers: see <a href="docs/DEVELOPMENT.md">docs/DEVELOPMENT.md</a> · what's new in the <a href="CHANGELOG.md">changelog</a>.</sub>
|
|
138
|
+
|
|
139
|
+
<div align="right"><sub>Made with 🍿 by <a href="https://github.com/kangsicj">@kangsicj</a></sub></div>
|
package/assets/icon.svg
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" role="img" aria-label="NexusSync">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="nxbg" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#5b2eff"/><stop offset="1" stop-color="#ff4fa3"/></linearGradient>
|
|
4
|
+
<radialGradient id="nxglow" cx="0.82" cy="0.14" r="0.7"><stop offset="0" stop-color="#7cf9ff" stop-opacity="0.55"/><stop offset="1" stop-color="#7cf9ff" stop-opacity="0"/></radialGradient>
|
|
5
|
+
<linearGradient id="nxplay" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#ffffff"/><stop offset="1" stop-color="#ffe3f1"/></linearGradient>
|
|
6
|
+
<clipPath id="nxr"><rect width="256" height="256" rx="58"/></clipPath>
|
|
7
|
+
</defs>
|
|
8
|
+
<g clip-path="url(#nxr)">
|
|
9
|
+
<rect width="256" height="256" fill="url(#nxbg)"/>
|
|
10
|
+
<rect width="256" height="256" fill="url(#nxglow)"/>
|
|
11
|
+
<!-- sync ring: two arcs chasing each other -->
|
|
12
|
+
<g fill="none" stroke="#ffffff" stroke-width="15" stroke-linecap="round">
|
|
13
|
+
<path d="M60 116 A70 70 0 0 1 178 72"/>
|
|
14
|
+
<path d="M196 140 A70 70 0 0 1 78 184"/>
|
|
15
|
+
</g>
|
|
16
|
+
<path d="M186 50 L200 92 L157 86 Z" fill="#ffffff"/>
|
|
17
|
+
<path d="M70 206 L56 164 L99 170 Z" fill="#ffffff"/>
|
|
18
|
+
<!-- play -->
|
|
19
|
+
<path d="M110 92 Q104 88 104 96 L104 160 Q104 168 110 164 L162 132 Q168 128 162 124 Z" fill="url(#nxplay)"/>
|
|
20
|
+
<circle cx="200" cy="200" r="0" fill="none"/>
|
|
21
|
+
</g>
|
|
22
|
+
</svg>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name NexusSync Ultimate: CRDT Canvas & Media Sync
|
|
3
|
+
// @name:ko 넥서스싱크 얼티밋: 캔버스 및 미디어 동기화
|
|
4
|
+
// @name:nl-BE NexusSync Ultimate: Canvas & Media Synchronisatie
|
|
5
|
+
// @namespace https://github.com/kangsicj/NexusSync
|
|
6
|
+
// @author kangsicj
|
|
7
|
+
// @homepageURL https://github.com/kangsicj/NexusSync
|
|
8
|
+
// @supportURL https://fairy.hada.io/@jinny
|
|
9
|
+
// @icon https://cdn.jsdelivr.net/npm/@kangsicj/nexussync@latest/assets/icon.svg
|
|
10
|
+
// @updateURL https://cdn.jsdelivr.net/npm/@kangsicj/nexussync@latest/dist/NexusSync.meta.js
|
|
11
|
+
// @downloadURL https://cdn.jsdelivr.net/npm/@kangsicj/nexussync@latest/dist/NexusSync.user.js
|
|
12
|
+
// @version 1.0.1
|
|
13
|
+
// @description Watch any web video together in perfect sync: cinema mode, live AI subtitles & translation, chat bubbles with auto-translation, quick ink, cover, go-together to the next episode.
|
|
14
|
+
// @description:ko 어떤 웹 영상이든 완벽한 싱크로 함께 보기: 시네마 모드, 실시간 AI 자막·번역, 자동 번역 말풍선 채팅, 잠깐 그리기, 가리기, 다음 화도 함께.
|
|
15
|
+
// @match *://*/*
|
|
16
|
+
// @include *
|
|
17
|
+
// @allFrames true
|
|
18
|
+
// @run-at document-idle
|
|
19
|
+
// @grant GM_setValue
|
|
20
|
+
// @grant GM_getValue
|
|
21
|
+
// @grant GM_info
|
|
22
|
+
// @grant GM_xmlhttpRequest
|
|
23
|
+
// @grant GM_registerMenuCommand
|
|
24
|
+
// @grant GM.setValue
|
|
25
|
+
// @grant GM.getValue
|
|
26
|
+
// @grant GM.listValues
|
|
27
|
+
// @grant GM.xmlHttpRequest
|
|
28
|
+
// @connect translate.googleapis.com
|
|
29
|
+
// @connect nexussync-dd5b4-default-rtdb.asia-southeast1.firebasedatabase.app
|
|
30
|
+
// @connect api.openai.com
|
|
31
|
+
// @connect api.groq.com
|
|
32
|
+
// @connect api.anthropic.com
|
|
33
|
+
// @connect api-free.deepl.com
|
|
34
|
+
// @connect api.deepl.com
|
|
35
|
+
// @require https://cdnjs.cloudflare.com/ajax/libs/lz-string/1.5.0/lz-string.min.js#sha256=95f4d1cbf099f57161b664bc048426ec3df92637801a4c79116e83315aa787e7
|
|
36
|
+
// ==/UserScript==
|