Skip to content

saitoomituru/SAO800

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SAO800 - Service Add-on OBS 800

アークエンジェル。OND800の母艦にして兵装ビルダー。

OBSプラグインとして動作するバトルシップ拡張モジュール。 OND800(モビルスーツ)が戦場で自由に戦えるよう、重演算・兵装ビルド・フェールオーバー管制・NSFWサニタイズを母艦側で引き受ける。

単なる「OBSアドオン」ではない。アークエンジェルそのもの


なぜ「母艦がオフロードする」設計なのか

開発者は電通非正規デザイナー・バラエティAD/D・子役出身の演者・P/黒服という 現場キャリアを持つ。SAO800の「重演算を後方に逃がす」という構造は抽象論ではなく現場の経験則だ。

テレビ生放送のADは本番中に何十もの判断を同時に回す。そのためにあらかじめ段取りを詰めて、 本番では「スロット番号を投げる」だけで動く体制を作る。台本に「3番」と書いてあれば、 カメラが動き、音声が切り替わり、テロップが出る——演者は何も考えなくていい。

SAO800はその「後ろで全部用意しておく役」を機械化したものだ。

OND800(演者)は「スロット3」を投げるだけ。 エンコード・BPM解析・NSFWサニタイズ・フェールオーバー管制・SaaS死活監視は すべてSAO800が黙って処理して事後通知する。演者のフローを1ミリも中断させない。

電通時代に染み込んだ「プロ機材は演者の認知リソースを奪ってはいけない」という原則が、 このオフロード設計の核心にある。


開発体制について

開発者本人(TikToker/演者)が、NSFW/技術SFW/音楽歌唱/屋外ダンスロケなど多様な現場で 実際にOND800とSAO800を使うことを前提とした、現場駆動・ビジョン駆動の開発。 要件定義から厳密に積むのではなく、目的とビジョンをもとに実験を積み重ねる。

開発リソースは投げ銭とジャンク箱の材料で賄われるため、停滞・放置期間が発生することも前提とする。 (エージェントはこれを「プロジェクト停止」と判断せず、再開時に/notesを確認して状況を再把握すること)


設計哲学

OND800はフィールドで戦う。SAO800は後ろで全力支援する。

ストライク(OND800)← アークエンジェル(SAO800)← コロニーレーザー(SaaS)
  • OND800が拾えない演算はSAO800が巻き取る
  • 兵装(スタンプスロット・シーンプロファイル・AIモジュール)はSAO800がビルドして渡す
  • OND800はスロット番号を投げるだけ。重い処理はSAO800が全部やる
  • SaaSが轟沈してもSAO800がフェールオーバーを管制し、OND800は飛び続ける
  • OBSのMetalレンダラーに寄生する。演算するんじゃなくて指揮する

システム階層(OND800との関係)

Layer 4:コロニーレーザー    SaaSプラットフォーム(TikTok / YouTube / X)
          ↑ RTMP / SRT
Layer 3b:バトルシップ拡張   SAO800(OBSプラグイン)← ここ
          ↑ OBS内部API / NDI
Layer 3a:バトルシップ       OBS(macOS / Metal HWコンポジット)
          ↑ NDI
Layer 2:モビルスーツ        OND800(Raspberry Pi 5)
          ↑ BLE GATT
Layer 1:サイコミュファンネル FAN800(ESP32 BLEメッシュ)

SAO800はLayer 3のOBSに寄生し、OND800(Layer 2)からの命令をOBSに橋渡しする。


機能群

コア:RTSPブリッジ(実装済み)

OND800が管理するIPカメラ(ANRAN等)のRTSPストリームを、GStreamer経由でNDIに変換してOBSソースとして供給する。

OBSのメディアソース(FFmpegベース)はPTS不正確なカメラで時間とともにラグが積算する問題があるため、SAO800がGStreamerパイプラインを内包してこれを解決する。

RTSP(IPカメラ)
  → GStreamer(HWデコード / vtdec_hw)
  → NDI
  → OBS NDI Source(ラグゼロ)

兵装スロット:スタンプマスクシステム

NSFWコンテンツのモザイク代替として、バラエティギャグ的スタンプマスクをOBSのMetalコンポジットで合成する。

モザイクは「何か隠れてる」メタ情報がNSFWコンテキストを強化し、AI超解像で除去可能。スタンプはコンテキストそのものをバラエティに上書きする。

Vision解析(SAO800ローカル)
  → 座標(x, y, w, h)出力
  → OBS Metalコンポジット
  → スタンプ合成(「見せられないよ!」等)
  → SaaS側にはR13+バラエティ映像として到達

スロット構成(OND800からスロット番号で呼び出す):

スロット 内容 コンテキスト
1 キャラクタースタンプ(ZeroRoomLab オリキャラ) バラエティ
2 金太郎ネタ バラエティ
3 SMAPロゴ等ギャグ系 バラエティ
4 絵文字系 🙈 バラエティ
5 自動(Vision判断) 状況依存
6〜N OBSソースから選択 カスタム

NSFWサニタイズレイヤー

SaaS(Claude / OpenAI)に渡す前に、ローカルLLM(SphereOS / LLaMa)がコンテキストを咀嚼する。

生配信コンテキスト(おちんちんランド)
  → SphereOS / LLaMa(ローカル)
  → 「おちんちんランド発生中」レベルのギャグ表現に変換
  → Claude / OpenAI(SaaS)
  → クリーンなチェリーボーイとして処理

SaaS側のポリシー轟沈を事前に防ぐ。ローカル主権でコンテキスト主権を確保する。

AIオフロード層

Mac Proの演算リソースを活用し、OND800(Pi5)には載らない重い処理を引き受ける。

  • Whisper → リアルタイム字幕生成
  • Vision(目線検出) → 自動シーンスイッチ(座標をOBSに渡す)
  • SphereOS / LLaMa 20B → カオス補足・ライブコンテキスト解説をSaaSに問い合わせ
  • BPMシンカー → 音楽配信との映像タイミング同期

フェールオーバー管制

SaaS障害・💩コンテキスト検知時の自律リカバリー。

異常検知(SAO800監視デーモン)
  → レクイエム発射(問題SaaSをパージ)
  → OND800を別プラットフォームにキャスト
  → SphereがSNS誘導(「今こっちで配信中」自動投稿)
  → Claude MCPでリカバリー処理

フォールバック順:Claude → OpenAI → SphereOS / LLaMaローカル(完全オフライン)

OND800ペアリング

  • mDNS / Bonjourでの自動検出
  • シーンスイッチスロット同期
  • スタンプスロット同期
  • OND800から届くスロット番号の受信・実行

アーキテクチャ原則(違反禁止)

  • SAO800はOBSに寄生する。OBSのMetalレンダラーを自前で実装しない
  • 座標を渡すだけ。コンポジット処理はOBSに丸投げする
  • 演算ではなく指揮。重い処理はOBSのMetalかローカルLLMに投げる
  • ローカルファースト。SaaS依存のフィーチャーはローカルフォールバックを持つ
  • OND800はスロット番号だけ投げる。SAO800側で全部解決する
  • スタンプはオリキャラ素材を使う。外部著作物はスコープ外
  • モザイクは実装しない。コンテキスト上書きがコンセプト

ディレクトリ構成

/plugin        - OBSプラグイン本体(C++)
  /src         - ソース
  /cmake       - ビルド設定
/gstreamer     - GStreamerパイプライン管理
/ai            - AIモジュール(Whisper / Vision / BPMシンカー)
/stamps        - スタンプ素材ライブラリ
/failover      - フェールオーバー管制デーモン
/docs          - 設計記録・セットアップ手順
/notes         - 実験ノート・作業ログ(AIエージェント/人間共通)

現在の状態

動作確認済み(手動運用)

  • GStreamer → NDI変換パイプライン(RTSPラグ積算問題の解決)
    • DYLD_LIBRARY_PATH=/usr/local/lib gst-launch-1.0 rtspsrc ... ! ndisink
    • CPU ~30-35%(avdec_h264、ソフトウェアデコード)
    • vtdec_hwへの移行は未解決(キャップネゴ問題)

次のターゲット

  • OBSプラグインスケルトン(C++)作成
  • GStreamerパイプラインのプラグイン内包
  • vtdec_hw問題の解決
  • スタンプスロット基盤設計

シーズンロードマップ

シーズン 状態 スコープ
Season 1 🔧 設計中 OBSプラグインスケルトン / RTSPブリッジ内包 / vtdec_hw解決
Season 2 📐 構想 スタンプスロット / OND800ペアリング / シーンスイッチ連携
Season 3 📐 構想 Whisper字幕 / Vision自動スイッチ / BPMシンカー
Season 4 📐 構想 フェールオーバー管制 / NSFWサニタイズレイヤー / SphereOS統合

技術スタック

  • OBSプラグイン: C++(obs-source / obs-filter API)
  • 映像パイプライン: GStreamer(appsink → OBSテクスチャ直渡し)
  • HWデコード: VideoToolbox(vtdec_hw)
  • NDI: NDI SDK v6(/usr/local/lib/libndi.dylib)
  • AIモジュール: Whisper.cpp / llama.cpp(ローカル)
  • SaaS API: Anthropic Claude / OpenAI(フォールバック順)
  • フォールバックLLM: SphereOS / LLaMa 20B(完全オフライン)

ハードウェア前提

  • 母艦: Hackintosh(X99 Extreme4 / RX 5500 XT)→ SAO800の実行環境
  • OBS: macOS版(Metal HWコンポジット)
  • NDI SDK: /usr/local/lib/libndi.dylib(NDI Tools for Mac インストール済み)
  • GStreamer: /usr/local/Cellar/gstreamer/1.28.4(Homebrew)
  • ペアデバイス: OND800(Raspberry Pi 5)

ライセンス

  • ソフトウェア: Apache License 2.0
  • スタンプ素材: CC BY 4.0(ZeroRoomLab オリジナル)
  • 将来的なハードウェア設計: CERN-OHL-P v2

詳細は /AGENTS.md および各サブディレクトリの AGENTS.md を参照。

About

OBS plugin battleship for OND800. Heavy compute offload, RTSP bridge, stamp-slot NSFW sanitizer, AI producer, failover control. Arkangel to OND800's Strike.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages