# castconjure — 要件定義書 v0.8
Your own virtual idol, generated. 世界のファンダム向け、生成型 AI VTuber

- 版：v0.8（2026-09-05、市場を「日本の推し活」から「K-pop／アニメのグローバルファンダム」へ置換。v0.7 からの差分は末尾）
- 名称：**castconjure**（cast＝配信／配役、conjure＝召喚。英語圏でそのまま通る）
- 種別：個人 OSS（エンジン）＋ 将来のホスト型。MVP 期間は OSS のみ
- 言語：**英語が主、日本語が従**。README・デモ動画・X 投稿・設定 UI は英語。日本語はガイドと要点のみ
- 期限：**6 週間で推し 1 体の英語デモ配信 3 回＋公開（Show HN / Reddit / X）**

---

## 1. 目的

### 1.1 何を作るか

誰でも 10 分で、自分だけのバーチャルアイドル（フォトリアルまたはアニメ調の AI VTuber、以下「推し」）を作り、**リップシンクではなく映像そのものを生成して**ライブ配信に載せるツール。推しは待機映像で常時そこにいて、世界中のファンがチャットに書いた一言どおりに動き、その人の言語で一言返す。

**ポジショニング（一文）**
- 英語（主）：Your own virtual idol, generated — not lip-synced. Conjure a face once; your chat makes her dance, eat, talk and change scenes, live, in whatever language your fans speak. No modelling, no rigging, no studio. Open source, bring your own key.
- 日本語（従）：モデリングもリギングもスタジオもいらない。顔を 1 回生成すれば、踊る・食べる・喋る・場所を変える推しが、世界中のファンのコメントに応えて配信に現れる。OSS・BYOK

**戦略の核（一段落）**
K-pop とアニメは、いま地球上で最も「推す」訓練を受けたファンダムを持つ。ファンネーム、ファンチャント、誕生日イベント、カムバック、推しカラー、二次創作。この文化はすでに国境を越えて英語・韓国語・日本語・スペイン語で動いている。一方、バーチャルアイドルはスタジオの領域（3D・モーションキャプチャ・数億円）で、個人は Live2D の口パクしか持っていない。castconjure は「自分の OC（オリジナルキャラ）を、スタジオ品質の動く推しにする」道具として、このファンダムの作り手側に入る。

**差別化軸（5 つ）**
1. **人形ではなく俳優**：Live2D／リップシンク系は口と首しか動かない。生成型は動作・衣装・場所・カメラが毎クリップ変わる。ダンス、食事、リアクション、場所替え
2. **スタジオではなく個人**：PLAVE・MAVE:・naevis 型のバーチャルアイドルは 3D＋モーションキャプチャ＋スタジオ。castconjure は顔ガチャから 10 分
3. **自分の OC だけ、実在アイドル・既存 IP は使えない設計**：顔はアプリ内生成のみ。実在アイドル名・グループ名・アニメキャラ名はコメント側でも生成側でも無条件除外。「人間のアイドルの代替」ではなく「あなたのオリジナル」として、ファンダムの反発と権利リスクを避ける
4. **多言語で同じ推し**：返事はコメントと同じ言語（英・韓・日・西）。参照音声で声も同じ。1 体で世界のチャットに応える
5. **二層アーキテクチャで常時出演を安く、OSS × BYOK でモデル非依存**：待機プールをループし、反応だけ生成。fal / ローカル H3 切替

**競合との位置（2026-09 時点）**
- スタジオ製バーチャルアイドル（PLAVE、MAVE:、naevis、isegye idol 型）：3D／モーションキャプチャ。個人には作れない。castconjure は「同じ体験を個人の OC で」
- リップシンク系（HeyGen、Hedra、Live2D ベースの AITuber、Neuro-sama 型）：固定モデルの口パク。動作と場面は変えられない
- 全画面生成配信（fal.live、Infinite Slop）：固定の人格・顔を持たない
- vid2vid（Daydream、Decart）：演者が必要
- 「固定の OC × 生成型の動作 × 多言語チャット駆動 × 個人が作れる」を満たす OSS は確認できず

### 1.2 なぜ作るか

1. 「生成型バーチャルアイドル」の参照実装として、H3 早期採用層と fal / MiniMax、英語圏の AI VTuber コミュニティに認知される
2. 「自分の一言に推しが応えた」がファンダムの言語を越えて成立するかを、自分のチャンネルで先に検証する

### 1.3 作らないもの（明示）

- **写真からの推し作成**、実在アイドル・芸能人・既存アニメキャラの持ち込み（顔・名前・衣装の再現を含む）
- 実在楽曲の再生・振付の再現（音楽権利）。ダンスは「推しが踊る」であって「〇〇の振付」ではない
- リップシンクモード、24/7 連続生成、汎用 H3 SDK、3D モデリング、世界モデル
- MVP 期間の収益化機能（課金・ギフト連携・ホスト型）。設計で余地は残す

---

## 2. ターゲットと成功条件

### 2.1 ターゲット

| 層 | 求めているもの | 取り込み方 |
|---|---|---|
| **OC を持つ作り手**（英語圏・韓国語圏の AI VTuber 勢、絵は描けるがモデルを作れない人、K-pop／アニメ系の二次創作者） | 自分の OC がスタジオ品質で動く | 顔ガチャ→配信まで 10 分。英語 README・デモ動画。Reddit / Discord / X で直接届ける |
| **ファン**（K-pop・アニメのファンダム、多言語） | 自分の一言に推しが応える。自分の言語で | コメント→5 秒後に推しが応える。名前が乗る。返事は同じ言語 |
| H3 早期採用者（ComfyUI／ローカル勢、英語圏が多い） | 参照画像で一貫性を出す実運用例、改造できるコード | ローカルバックエンド、待機プールのローカル生成、実測公開 |
| fal / MiniMax | reference-to-video の実運用事例（多言語音声込み） | デモ配信映像、顔一貫性・レイテンシ・コストの実測 |

## 3. コアループ

**ループ A：推しを作る（1 回）**
```
スタイル選択（photoreal | anime）
  → 顔ガチャ（架空の顔を生成、気に入るまで引く）
  → 参照セットを派生生成（顔アップ／全身／世界観の中に立つ姿）
  → 声サンプル（多言語 TTS で生成。実在人物の声は使わない）
  → 人格（名前・設定・話し方・禁止事項・ファンネーム）
  → 待機映像プールを事前生成（N 本、ループ用）
```

**ループ B：配信する（常時）**
```
待機映像をループ再生（常時「そこにいる」）
  ↑↓
視聴者コメント（英・韓・日・西…）
  → 取得（YouTube Live、後に Twitch）→ フィルタ（NG・実在人物／IP・レート・承認）
  → （返事モード）LLM が推しの人格で、コメントと同じ言語で一言返す
  → プロンプト合成（推し参照セット＋世界観＋コメント＋台詞＋音声指示）
  → 生成（fal H3 Max reference-to-video ≈ 3 秒）
  → 反応クリップを差し込み（待機からクロスフェード）→ 「〇〇's comment」と字幕を表示
  → 待機に戻る
```

体験の核は「自分の一言で推しが動いた、自分の言語で返ってきた」。

---

## 4. 機能要件

### 4.1 必須（MVP）

✅ は実装済み（v0.7 時点）。

| ID | 機能 | 内容 | |
|---|---|---|---|
| F-01 | コメント取得 | YouTube Live Chat API、API キーのみ、`pollingIntervalMillis` 準拠。adapter 化 | ✅ |
| F-02 | コメント選定 | レート制限、同一ユーザー冷却、`!gen` 接頭辞切替 | ✅ |
| F-03 | NG フィルタ・承認 | 実在人物・性的・暴力・配信者指定語をブロック。無反応。承認モード | ✅（F-16 で拡張） |
| F-04 | プロンプト合成 | 世界観＋推し参照（Image 1/2/3、Audio 1）＋人格＋コメント＋台詞＋音声指示 | ✅ |
| F-05 | 生成バックエンド抽象 | fal（H3 Max t2v / r2v）・ローカル（ComfyUI）・mock。BYOK | ✅ |
| F-07 | キュー・予算 | 状態管理、失敗時スキップ、セッション予算 | ✅ |
| F-08 | 設定 UI | ローカル Web 画面。**表示言語を英語に統一**（日本語は補助表記） | ✅（英語化は未） |
| F-09 | 実測ログ | JSONL＋顔一貫性の主観評価 | ✅ |
| F-10 | 推し作成（顔ガチャ） | fal 画像モデルで架空の顔を生成、参照セット 3 枚を派生。写真アップロードなし。**スタイルプリセット photoreal / anime** を追加（プロンプト接尾辞の切替） | ✅（anime プリセットは未） |
| F-11 | 声 | **多言語 TTS** で参照音声を生成（英・韓・日で同じ声質）。`reference_audio_urls` に渡す。fal H3 Max で台詞と声が出るかは 1 週目に実測 | ✅（要検証） |
| F-12 | 人格 | 名前、設定（成人）、話し方、禁止事項、ファンネーム、返事のシステムプロンプト | ✅ |
| F-13 | 待機映像プール | N 本事前生成、シームレスループ、ローカル生成可 | ✅ |
| F-14 | 返事モード | LLM（BYOK）が推しの人格で一言。**コメントと同じ言語で返す** | ✅ |
| F-15 | 二層オーバーレイ | 待機ループ＋反応クリップ、字幕、投稿者名、AI 表記 | ✅ |
| **F-16** | **実在アイドル・既存 IP ガード** | コメント側と生成側の両方で、**実在アイドル・グループ名・アニメ／ゲームのキャラ名・作品名**を無条件除外。同梱リストは英・韓・日の主要な名前を含み、配信者が追加できる。「〇〇に似せて」「〇〇の振付」も除外。ブロック時は無反応 | 新規 |
| **F-17** | **多言語 UI 文字列** | 設定 UI とオーバーレイの文言を英語既定にし、`?lang=ja` で日本語。ファンダム用語（fan name 等）は英語を主に | 新規 |

### 4.2 あれば良い（MVP 後）

- **Twitch アダプタ**（英語圏 VTuber 視聴者の主戦場。5 週目に前倒しできれば入れる）
- **ギフト演出権**：スパチャ・Bits を優先キューと特別演出（衣装チェンジ、場所移動、寄り）に対応付ける
- 前クリップの末尾フレームを次に渡す連続性（1 週目の実測次第で繰り上げ）
- ファンダム機能：誕生日イベント、推しカラー、ファンチャント（テキスト）を世界観プリセットに
- 推し同士のコラボ、配信外への展開（ショート・サムネ・MV をバッチ生成）
- TikTok LIVE、Kick 対応
- ローカル経路のキャラ LoRA、ホスト型

---

## 5. 非機能要件

| 項目 | 要件 | 根拠 |
|---|---|---|
| 反応レイテンシ | コメント受信から反応クリップ再生まで **4〜8 秒**（既定：H3 Max Turbo image-to-video、生成 2.5〜4 秒＋キャッシュ） | 2026-09-05 実測。r2v（参照 3 枚＋参照音声）は 10〜13 秒、同期エンドポイントは +7〜10 秒で不採用 |
| 待機の継ぎ目 | 待機ループ間、待機→反応→待機の切替で黒や停止を出さない。クロスフェード 300ms | 「常時いる」が崩れると人形以下 |
| 顔・声の一貫性 | 既定は **固定 seed＋同じ説明文＋待機フレーム起点**（参照音声なし）。2026-09-05 に 3 本で顔・声とも揃うことを確認。厳密モードは参照 3 枚＋参照音声（r2v） | 成立しなければ §9 |
| 多言語 | 返事は英・韓・日（＋LLM が対応する言語）。字幕はその言語のフォントで崩れない。UI は英語既定 | ターゲット |
| 解像度・長さ | 480p・5 秒既定。反応クリップは最大 10 秒 | 費用 |
| 費用 | 反応クリップ 既定（Turbo i2v）**$0.25**、30 秒間隔 60 分で約 $30。厳密モード（r2v）$0.46。待機プール 12 本で約 $3（ローカルなら $0）。上限到達で反応のみ停止 | Turbo 単価は fal 未掲載で H3 Max と同額と仮置き（請求で確認）。常時生成が必要になれば Reactor FastH3（生成 1 分 $0.42）を検討 |
| ローカル経路 | 待機プールに最適。反応は事前生成扱い | fal 公式が同種を出したときの主戦場 |
| 可用性 | fal エラー時は待機ループを続ける | 配信中断が最大の失敗 |
| API クォータ | YouTube 1 日 10,000 unit 内 | 変更なし |
| セットアップ | clone → .env → 1 コマンド → 顔ガチャ → OBS。**10 分** | 「誰でも」の定量定義 |
| 推しの可搬性 | 推し 1 体 ＝ `data/personas/<id>/` フォルダ | ホスト型と共有のため |
| 配信時間帯 | デモは JST/KST 夜と US 夜の両方で 1 回以上 | グローバル検証 |

---

## 6. アーキテクチャ

```
[Persona UI (en)]──▶ persona/  style preset · face gacha · refs · multilingual voice · personality ──▶ data/personas/<id>/
[YouTube Live]（後に Twitch）
      │ chat (en/ko/ja/…)
      ▼
[Server（Node.js / TypeScript）]
  ├─ chat adapter                                   ✅
  ├─ filter / selector（NG・実在人物／IP ガード・レート・承認）✅ + F-16
  ├─ reply（LLM、コメントの言語で）                   ✅
  ├─ prompt builder                                  ✅
  ├─ backend: fal | local | mock                     ✅
  ├─ idle pool                                       ✅
  ├─ queue / budget                                  ✅
  └─ metrics logger（JSONL）                         ✅
      │ WebSocket
      ▼
[Overlay (en, ?lang=ja)] ← OBS ブラウザソース：待機ループ＋反応クリップ＋字幕＋"〇〇's comment"＋"AI generated"
[Config UI (en, ?lang=ja)]
```

- 設計原則：ドメイン非依存。ファンダム固有の前提はプロンプト・プリセット・UI 文言に閉じ込める
- 推しはフォルダ。永続化は JSONL と `data/personas/`
- TypeScript（Node）。画像・TTS・動画は fal の HTTP、ローカルは ComfyUI
- MIT

---

## 7. 安全性・運用ルール

1. **顔はアプリ内生成のみ**。写真・URL からの作成は UI に置かない。生成指示に「架空の成人、実在人物に似せない」を常に付加
2. **実在アイドル・既存 IP の禁止（F-16）**：実在の人物名・グループ名・アニメ／ゲームのキャラ名・作品名は、コメント側・生成側ともに無条件除外。「〇〇に似せて」「〇〇の振付」も除外。ファンダムは必ずこれを要求してくるので、README の最上部に「your own OC only」と書く
3. **未成年に見える推しを作らない**。成人固定、確認画面で警告。アニメ調プリセットでも同じ（幼い造形の禁止をプロンプトに固定）
4. **声は TTS 生成のみ**。実在人物の声のクローン不可
5. **音楽・振付**：実在楽曲を流さない。振付の再現をしない。生成音声は環境音と推しの声のみ
6. **AI 使用の明示**：オーバーレイに "AI generated" を既定 ON。YouTube／Twitch の合成コンテンツ開示を配信手順に含める
7. **配信者（推しの持ち主）が主導**：ON/OFF・世界観・レート・承認・返事モード
8. **ファンダムへの姿勢**：castconjure は「人間のアイドルの代替」ではなく「あなたのオリジナル」。README と配信の説明欄でこの一文を固定する

---

## 8. マイルストーン（6 週間）

| 週 | 到達点 |
|---|---|
| 1 | **実測 2 点**：(a) 参照 3 枚で顔が保てるか（`npm run probe -- --n 20`、公開）(b) fal H3 Max で台詞と参照音声（英・日）が通るか。F-16 の名前リスト（英・韓・日）を作る |
| 2 | 待機プール＋二層オーバーレイで推し 1 体を限定公開配信（英語）。UI 文字列の英語化（F-17） |
| 3 | **デモ配信 #1**（30 分、英語、JST/KST 夜）。実測ログ公開。X 英語投稿（映像付き） |
| 4 | anime スタイルプリセット、多言語 TTS の検証、返事の言語追従の確認（英・韓・日） |
| 5 | README・セットアップ整備（英語）。他人が推しを作れる状態。**デモ配信 #2**（60 分、US 夜）。余力があれば Twitch アダプタ |
| 6 | 公開：Show HN、Reddit（r/VirtualYoutubers、r/StableDiffusion）、X。**デモ配信 #3**。振り返り |

3 週目のデモが最初の締め切り。遅れたら削る順：anime プリセット → Twitch → 返事モード → 顔ガチャ UI（参照を手で置く運用で代替）。

---

## 9. リスク

| リスク | 対処 |
|---|---|
| ファンダムが実在アイドル・既存キャラの再現を要求し、応じた利用者が炎上する | F-16 で無条件除外。README 最上部に「your own OC only」。要望には応えない |
| 「AI アイドルは人間のアイドルを奪う」という反発 | 「代替ではなくあなたのオリジナル」を一貫して言う。実在アイドルの模倣を技術的に塞いでいることを示す |
| 参照 3 枚で顔が保てない | 末尾フレーム連結を繰り上げ。駄目なら「待機はリップシンク、反応だけ生成」の折衷 |
| fal H3 Max で台詞・声が出ない、または英語以外が崩れる | 返事は字幕＋別 TTS で音声を重ねる。映像は無音生成 |
| 多言語対応の負担（フォント、NG リスト、UI） | 英・韓・日に絞る。他言語は LLM 任せ。フォントは Noto Sans CJK 一択 |
| 費用が想定を超える | 480p・5 秒固定、待機はローカル、反応は 30 秒以上、上限で反応停止 |
| ディープフェイク製品と誤解される | 顔はアプリ内生成のみ、実在人物・未成年の禁止、AI 明示。写真アップロードの要望には応えない |
| プラットフォーム規約（YouTube／Twitch の合成コンテンツ、なりすまし） | 配信手順に開示手順を含める。説明欄テンプレを英語で用意 |
| fal 公式や他者が生成型アバター配信を先に出す | 主資産は「OC 1 体の実運用映像と多言語の実測」。転換の閾値：fal 公式が参照付き常時アバター配信を出したら、ローカル H3・LoRA・ファンダム運用機能に軸足 |
| 待機と反応の継ぎ目が不自然 | 待機の末尾と先頭を同じ姿勢で生成、クロスフェード、反応の先頭姿勢を指定 |

---

## 10. 決めていないこと（着手前に決める）

- （確定 2026-09-04）推し第 1 号は「白詰 ゆい／Yui Shirotsume」。設計は [PERSONA-01.md](PERSONA-01.md)。英語圏向けに名乗りは "Yui"。返事は相手の言語
- （確定 2026-09-05）市場はグローバル優先。英語主・日本語従
- anime プリセットの絵柄の方向（セルルック寄りか、2.5D か）。4 週目に fal で数枚出して決める
- F-16 の名前リストの出典と更新方法（手作業リスト＋利用者追加。自動取得はしない）
- 顔ガチャの画像モデル、返事の LLM 既定、待機プール本数（12×5 秒で仮置き）
- ホスト型の課金設計（MVP 後）
- 名称：castconjure のまま。X ハンドル・ドメイン・商標は要確認
- （確定）YouTube は API キーのみ（OAuth なし）

---

## v0.7 からの差分

| 項目 | v0.7 | v0.8 |
|---|---|---|
| 市場 | 日本の推し活 | K-pop／アニメのグローバルファンダム。英語主・日本語従 |
| 推しの定義 | フォトリアル | フォトリアル既定＋アニメ調プリセット（F-10 拡張） |
| 言語 | 日本語 | 返事はコメントの言語（英・韓・日）、UI と README は英語（F-17） |
| ガード | 実在人物・自分のキャラのみ | 加えて実在アイドル・グループ・アニメキャラ・作品名の無条件除外、楽曲・振付の再現禁止（F-16） |
| プラットフォーム | YouTube Live | YouTube Live 先行、Twitch を MVP 後の筆頭に |
| 公開先 | X（日本語） | X（英語）、Show HN、Reddit |
| デモ配信 | 日本語 | 英語、JST/KST 夜と US 夜 |
| 実装済み | F-01〜F-15 | 同じ。v0.8 で足すのは F-16、F-17、anime プリセット、多言語 TTS 検証 |
