VRChat 写真を Dropbox から R2 経由でサイトに載せる
VRChat ハブページ のスクリーンセーバーとフォトギャラリーに、Dropbox に入れたスクショを自動で反映する仕組みを作りました。
VRChat のスクショは 2160×3840 などデカいので、そのまま git に入れるとリポジトリが太ります。ブラウザから Dropbox を直接読むのも帯域と CORS の点で微妙だったので、VPS で日次バッチ → Cloudflare R2 → 一覧用の JSON だけ push という形にしました。
ざっくり構成
1 | Dropbox(見出しフォルダごとに整理) |
git に残すのは一覧 JSON だけです。スクリーンセーバー用の宣材・アバター別の写真・思い出アルバムなど、Dropbox に入れた画像はすべて R2 から配信しています。
Dropbox 側の整理
1 | VRChatPictures/guetan.dev/ |
ギャラリー用は見出しフォルダに、それ以外は用途別フォルダに放り込むだけ。翌日のバッチでサイトに反映されます。
なぜ R2 か
- git に画像を積まない(一覧用の小さな JSON だけ更新)
- Cloudflare Pages と同じダッシュボードで完結
- egress 無料(スクリーンセーバーで何度読み込まれても転送料ゼロ)
- 無料枠 10 GB/月で、最適化後の写真なら当面 $0
VPS でやっていること
専用ユーザーで cron を回し、だいたい次の流れです。
- git pull でサイト側の最新を取得
- rclone で Dropbox から写真を取り込む
- 長辺 1920 にリサイズして圧縮し、ギャラリー用の一覧 JSON を生成
- 画像本体を R2 にアップロード
- 一覧 JSON だけ commit & push → Cloudflare Pages がデプロイ
rclone の Dropbox 認証や R2 の API トークン設定など、細かい手順は README に書いてあります。
サイト側
ページは一覧 JSON を読んで、スクリーンセーバーとギャラリーの表示内容を決めます。画像本体は R2 から配信し、一覧 JSON はサイト本体(Cloudflare Pages)から配る、という分担です。
VRChat ハブページ で動作を確認できます。



























































