[beam-drop · p2p file transfer]

ファイルを、
サーバー経由なし
直送する。

送りたい相手のブラウザに、 ファイルを直接届ける。 WebRTC DataChannel と trystero (Nostr 公開リレー) で、 signaling 用のメタデータだけが中継され、 ファイル本体は 2台のブラウザの間を直接通ります。 アップロード待ちなし、 中継サーバーなし。

p2p · webrtc trystero · nostr no upload

[ ./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 程度が現実的な上限です。 大きいファイル送信に最適化するストリーミング版は今後拡張予定。

相手のIPアドレスは見えますか?+

WebRTC の仕組み上、 P2P 接続を成立させるために IP アドレスは交換されます (ICE candidate)。 これは中継サーバーを経由しない P2P 通信に共通の特性です。 IP を秘匿したい場合は TURN サーバー経由の構成が必要ですが、 v1 では公開 STUN のみを使っています。

片方が iOS Safari でも動きますか?+

WebRTC DataChannel は iOS Safari 11+ で対応しています。 ただし バックグラウンド化すると接続が切れることがあります。 タブを表示したままにすると安定します。

なぜ Nostr リレーを使うのですか?+

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 ]

開発ログ。

BeamDrop

BeamDrop ができるまで — trystero + WebRTC でファイルをサーバー経由せずに直送する

trystero (Nostr 公開リレー) と WebRTC DataChannel で、 ファイル本体をサーバー経由せずブラウザ間で直送する P2P 共有ツールの設計記録。 signaling とペイロードの分離、 QRコード / 部屋コードの UX、 NAT越えとリレーの安定性まで解説します。

read log →

all_entries →

← back to ai-lab.org