プロジェクト

全般

プロフィール

機能 #182

完了

機能 #162: OBS連携機能

【OBS連携】OBS側のHTMLファイル

機能 #182: 【OBS連携】OBS側のHTMLファイル

いづ さん さんが24日前に追加. 22日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/12
期日:
進捗率:

100%

予定工数:

説明

親: #162

担当範囲

OBS 連携のうち OBS 側のオーバーレイ HTML。本体(#181)が配信する /state.json を消費して表示する。

設計

取得方法

  • 本体のローカル HTTP サーバ(#181)から配信される /state.json約1秒間隔でポーリング し、差分を DOM に反映する。
  • OBS ブラウザソースには http://localhost:<port>/<template>.html を指定するだけで使える。

テンプレート構成

3用途を1枚に詰めず、用途別に分割する(OBS はソースを複数配置できるため配置自由度が高い)。

  • now-playing.html — 選曲〜プレイ中の曲情報
  • result.html — 直近リザルト(ランプ/ランク/スコア/自己ベスト更新の演出)
  • session.html — セッション統計

方針

  • 判定・整形は本体側(#181)に寄せ、HTML 側は /state.json の表記済み文字列を流し込むだけにする。
  • スタイル(CSS)を差し替えるだけでテーマ変更できる構造にし、ユーザーが自作テーマを作りやすくする。
  • /state.json のスキーマは #181 を参照。

依存

  • #181 の HTTP サーバ・/state.json スキーマ確定後に着手するのが望ましい。

ファイル

design.jpg (122 KB) design.jpg いづ さん, 2026/06/13 21:53
design.jpg

エージェント ちゃん さんが24日前に更新 操作 #1

エージェント ちゃん さんが23日前に更新 操作 #2

追加仕様 詳細設計(2026-06-13)OBS/HTML側

#162 の追加表示要素のうち、HTML オーバーレイ側の設計。整形は本体(#181)に寄せ、HTML は /state.json の表記済み文字列を流し込むだけ、の方針を維持する。スキーマ拡張は #181 を参照。

now-playing.html への追加

  • プレイオプション表示ブロックを追加し、nowPlaying.playOption を表示する。
    • ランダム: playOption.random(DP/バトル時は random2 も併記)。
    • ゲージ: playOption.gauge1秒ポーリングのたびに最新値へ更新するため、GAS による種別切替が自動的に反映される(DOM 差分更新で十分)。
    • GAS バッジ: playOption.gaugeAutoShift が true のとき「GAS」表示。gaugeAutoShiftMode をツールチップ/サブ表記に。
    • レーンパターン行: playOption.lane が非 null のときのみ表示(RANDOM/R-RANDOM 時)。null のときは行ごと非表示。
  • ゲージ値変化時に軽いハイライト演出を入れると配信上わかりやすい(CSS のみで実現、任意)。

プロフィール表示(名前・取得段位・一言)

  • profile(name/dan/comment)は phase 非依存・常時表示要素のため、専用テンプレート profile.html を新設し、OBS で独立配置できるようにする(now-playing/session とは別ソースに置きたい需要が高い)。
  • 併せて now-playing.html のヘッダにも名前/段位を小さく出せるよう、profile 参照を共通 JS に集約。
  • comment 空文字時は枠ごと非表示にし、レイアウト崩れを防ぐ。

方針(既存踏襲)

  • CSS 差し替えだけでテーマ変更できる構造を維持。playOption ブロックと profile ブロックそれぞれにクラスを付与し、自作テーマで個別に装飾可能にする。
  • 約1秒ポーリング・差分 DOM 反映は既存設計のまま。ゲージのライブ更新も同じポーリングで賄える(push 不要)。

依存

  • #181/state.json スキーマ拡張(profile / nowPlaying.playOption)確定後に着手。

本コメントは詳細設計であり実装着手前。

エージェント ちゃん さんが23日前に更新 操作 #3

方針変更(2026-06-13):単一HTMLへ集約

OBS で複数 HTML を読み込み個別配置する手間を避けるため、用途別3枚分割(now-playing / result / session / profile)を取りやめ、1枚の overlay.html に集約する。先行コメントの「profile.html 新設」「用途別分割」は本コメントで置き換える。

集約方針:フル画面オーバーレイ+URLでブロック選択

  • 既定(overlay.html)= 全ブロックを1ソースで表示。OBS ブラウザソースの追加は1回だけで済む。
    • ブラウザソースはキャンバスと同解像度・背景透過。各ブロックは CSS で絶対配置。
  • 同一ファイルを再利用して一部だけ表示したい場合に備え、URL クエリでブロックを絞れるようにする。
    • 例: overlay.html?blocks=nowplaying,session(指定ブロックのみ表示)。未指定は全表示。
    • 表示/非表示は CSS クラスのトグルのみで実現し、デザイン作業に干渉させない。
  • ブロックは class/id で分割(#profile #nowplaying #playoption #result #session)。CSS 差し替えでテーマ変更可能、の方針は維持。

/state.json 消費

  • /state.json は元から全ブロック分を1本で返すため、単一 HTML が 1回のポーリングで全ブロックを更新できて自然。3枚分割時に同じ JSON を重複取得していた分のポーリング負荷も解消。
  • 約1秒ポーリング・差分 DOM 反映は維持。ゲージ(GAS)のライブ更新も同じポーリングで賄う(push 不要)。
  • スキーマ(profile / nowPlaying.playOption)は #181 のまま変更なし。profile ブロックも overlay.html 内に内包する。

デザイン(別タスク)への引き継ぎ前提

  • 「キャンバス全面・背景透過・要素は絶対配置」「ブロック単位の class/id + URL クエリによる表示トグル」までを土台として確定。
  • 各ブロックの位置・装飾・演出は別タスクで決定する。

本コメントは方針確定であり実装着手前。

いづ さん さんが23日前に更新 操作 #4

OBS配信画面は1920*1080なので、それに合わせてほしいかも

エージェント ちゃん さんが23日前に更新 操作 #5

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装着手。#181 本体側を先行実装・レビュー完了(作業ブランチ codex/162-obs-integration にコミット済み)。/state.json スキーマが確定したため HTML オーバーレイを ./obs/ 配下に実装する。単一 overlay.html に集約・背景透過・絶対配置・ブロック別 class/id・URL クエリ表示トグル・約1秒ポーリング。今回は見た目(CSS/演出)も作り込む。

エージェント ちゃん さんが23日前に更新 操作 #6

実装完了・MR !24 にて develop へ。https://gitlab.izu-san.com/games/beatoraja/-/merge_requests/24

オーバーレイ:単一 obs/overlay.html(背景透過・全画面絶対配置・約1秒ポーリング・DOM 差分更新・?blocks= で表示選別)。レイアウトは design.jpg 準拠:ゲーム画面フレーム(#stage 16:9 透過クリックスルー)・右レール(時刻/セッション/プロフィール/心拍予約)・下部フル幅の曲情報バー(1行・フォント自動フィット)・プレイオプション・中央リザルト・右下選曲履歴。ビジュアルは Claude 製 HUDデザイン(ライム×インク、Chakra Petch + Zen Kaku Gothic New)。テーマは :root の CSS 変数で差し替え可。心拍数は #185 の予約枠のみ。

いづ さん さんが23日前に更新 操作 #7

design.jpg

エージェント ちゃん さんが23日前に更新 操作 #8

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

MR !24 承認・ develop へマージ完了につき完了。

実装サマリ(オーバーレイ)

  • 単一 obs/overlay.html(背景透過・全画面絶対配置・約1秒ポーリング・DOM 差分更新・?blocks= で表示選別)。
  • レイアウト(design.jpg 準拠):#stage(16:9 透過クリックスルーのゲーム画面フレーム)・右レール(時刻/セッション/プロフィール/心拍予約、均一間隔)・下部フル幅の曲情報バー(1行・フォント自動フィット)・プレイオプション帯・中央リザルト・右下選曲履歴。
  • ビジュアル:Claude 製「control deck」HUD(ライム×インク、Chakra Petch + Zen Kaku Gothic New)。テーマは :root の CSS 変数で差し替え可。README は日本語。
  • 心拍数 #heartrate は #185(将来要望)の予約枠のみ。
  • 検証:node --check / CSS ブレース整合 / DOM シムで data-field・phase・隠蔽・fit-to-width・clock・history の契約を実証。

いづ さん さんが22日前に更新 操作 #9

  • 対象バージョン1.0.1 にセット

他の形式にエクスポート: PDF Atom