SYNCPRES / HTML MODE

任意のHTMLスライドを、
1行で追従可能にします。

reveal.js・impress.js・自作のHTMLスライドに <script> を1つ追加するだけ。発表者端末の操作を、別端末の画面がリアルタイムで追従します。HDMIケーブルが壇上まで届かない会場で、あなたのスマホから会場PCのスライドを操作できます。

2分でセットアップ

1. Supabaseクライアントと sync-lite.js を読み込む

<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2/dist/umd/supabase.min.js"></script>
<script src="https://sadame-client-docs.pages.dev/syncpres/sync-lite.js"
        data-session-id="my-talk-2026"
        data-framework="reveal"></script>

2. URLパラメータで役割を決める

URL挙動
?role=presenter発表者端末。矢印キーで操作、スライド変更を送信
?role=display表示端末。発表者に追従、カーソル非表示
(未指定)発表者として起動、sidを自動生成してURLに埋め込む

3. 接続

発表者端末で起動 → 画面下に「表示側URL」が表示 → それを会場PCのブラウザで開く。以上。

完成形の例

平成桜まつり2026の代表挨拶用スライド(reveal.js + sync-lite):

https://sadame-client-docs.pages.dev/shusei/marche-slides?role=presenter

ソース: marche-slides.html

対応フレームワーク

reveal.js(data-framework="reveal"

reveal.js本体を先に読み込んで Reveal.initialize() を呼んだ後に、sync-lite.jsを読み込む。自動でアダプターが繋がります。

<script src="...reveal.js"></script>
<script>
  Reveal.initialize({
    hash: false,
    keyboard: new URLSearchParams(location.search).get('role') !== 'display'
  });
</script>
<script src="...sync-lite.js" data-framework="reveal"></script>
必須設定
表示端末側で keyboard: falsetouch: falsecontrols: falsehash: false にしておく(発表者に操作権を集約するため)。上記例のように role パラメータで分岐する。

impress.js(data-framework="impress"

<div id="impress">
  <div class="step">Slide 1</div>
  <div class="step">Slide 2</div>
</div>
<script src="...impress.js"></script>
<script>impress().init();</script>
<script src="...sync-lite.js" data-framework="impress"></script>

自作スライド(data-framework="custom"

任意のスライド実装。SyncPresのAPIで手動配線:

<script src="...sync-lite.js" data-framework="custom"></script>
<script>
  SyncPres.onReady(() => {
    // 表示側: 受信した番号でスライドを切り替える
    SyncPres.onSlide(h => myRenderer.goto(h));

    // 発表者側: スライド変更時に送信
    if (SyncPres.role === 'presenter') {
      myRenderer.on('change', h => SyncPres.broadcast(h));
    }
  });
</script>

data-* 属性オプション

属性デフォルト説明
data-session-idsyncpres-liteチャンネル名のプレフィックス。発表名で分ける
data-frameworkcustomreveal / impress / custom
data-heartbeat1000再送間隔(ミリ秒)。ネット不安定時は短く
data-auto-uitruefalseで接続状態UIを非表示(自作UIを使う時)

JavaScript API

API説明
SyncPres.role"presenter" or "display"
SyncPres.sidセッションID(文字列)
SyncPres.broadcast(h)スライド番号を送信(発表者側)
SyncPres.onSlide(fn)スライド受信時のハンドラ登録(表示側)
SyncPres.onReady(fn)初期化完了時のコールバック
SyncPres.getChannel()生のSupabase channelへアクセス(拡張用)

仕組み

制限事項

PDF版との違い

SyncPres PDF版SyncPres HTML Mode
素材PDFアップロード任意のHTMLスライド
デザイン自由度元PDF依存CSS/JSで完全カスタム
動画・アニメ不可可(reveal.jsの機能すべて使える)
ホストSyncPres側自分のサイト or Pages
同期対象PDFページスライドインデックス
視聴者の接続syncpres.comのURLスライド作成者のURL