[beam-drop · p2p file transfer]
送りたい相手のブラウザに、 ファイルを直接届ける。 WebRTC DataChannel と trystero (Nostr 公開リレー) で、 signaling 用のメタデータだけが中継され、 ファイル本体は 2台のブラウザの間を直接通ります。 アップロード待ちなし、 中継サーバーなし。
[ ./how_it_works ]
step / 01
送りたいファイルを「送る」 タブにドロップ。 サーバーには上がらず、 ブラウザのメモリにだけ保持される。
step / 02
6文字の room_code と共有URLが生成される。 QRコードを相手のスマホで読み取るか、 URLを送るだけ。
step / 03
相手がリンクを開くと WebRTC で P2P 接続が成立。 ファイル本体は DataChannel を通り、 サーバーを経由せずに相手のブラウザへ届く。
[ ./faq ]
送られません。 接続を成立させるための SDP / ICE candidate (相手のIPなど、メタデータ) だけが Nostr 公開リレーを経由します。 これが終わると、 ファイル本体は WebRTC DataChannel を通って 2台のブラウザ間で直接やり取りされます。 中継サーバーがファイルを保持・閲覧することはありません。
v1 は送受信側どちらもファイル全体をメモリに保持する設計のため、 PC で 500MB 程度、 スマホで 100MB 程度が現実的な上限です。 大きいファイル送信に最適化するストリーミング版は今後拡張予定。
WebRTC の仕組み上、 P2P 接続を成立させるために IP アドレスは交換されます (ICE candidate)。 これは中継サーバーを経由しない P2P 通信に共通の特性です。 IP を秘匿したい場合は TURN サーバー経由の構成が必要ですが、 v1 では公開 STUN のみを使っています。
WebRTC DataChannel は iOS Safari 11+ で対応しています。 ただし バックグラウンド化すると接続が切れることがあります。 タブを表示したままにすると安定します。
Nostr の公開リレーは API key 不要・無料・分散運用されているため、 「ブラウザだけで動く」 thesis に最適でした。 trystero ライブラリが内部で複数の Nostr リレーへ接続して signaling のフォールバックを担保します。 リレーは SDP の数十KB を中継するだけで、 ファイル本体は通りません。
voice-scribe / clip-cast / bg-snap / text-pluck / pdf-anvil / pixel-lift / pic-flip / mind-cell に続くラボの 9本目です。 これまでは「ブラウザ内で処理」 だったのが、 BeamDrop は「ブラウザ間で直送」 という別軸。 サーバーに上げない という思想を、 1台完結から 2台 P2P へ広げた位置づけです。
[ ./journal ]