x-yuya Radio
全自動ポッドキャスト生成システム
x-yuya Radio — AIパーソナリティ2人のポッドキャスト自動生成
Obsidianに溜めた思考ログや日記を素材に、AIがラジオ番組の台本を書き、2人のAI話者が掛け合いで読み上げて毎日配信します。人の手を借りずに、毎日ポッドキャストが1本できあがります。
概要
毎日決まった時刻にAIが起動し、2人トーク形式のラジオ音声を生成して配信します。番組は2チャンネルあります。
| チャンネル | タイプ | 実行 | 尺 | 特徴 |
|---|---|---|---|---|
| BGM | 最新ニュース型 | 毎日00:00 | 約8〜10分 | Web検索で最新の話題を取り上げる |
| 価値観ラヂオ | 内省・深掘り型 | 手動 / まとめて生成 | 約10分 | ノートを読み込み、過去に話したテーマは避ける |
処理の流れ
入力: Obsidian(思考ログ・ブックマーク・日記)+ Web検索
↓ Codexが2人の掛け合い形式で台本を生成(4000〜5000字)
↓ AivisSpeechがセリフを1行ずつ読み上げ
↓ 音声を連結して音量を調整し、MP3化
↓ Cloudflare R2 へアップロード
出力: 番組リストへ追加し、Kanbanのラジオプレイヤーで再生

生成したエピソードはKanban内のプレイヤーで再生できる。再生速度の切り替えにも対応
技術スタック
- 台本生成: Codex をプログラムから自動起動
- 音声合成: AivisSpeech。オープンソースなので回数制限がなく、話者の声も選べる
- 言語 / 実行: Python 3.11 / Bash
- インフラ: Cloudflare R2(音声の保管)/ GitHub Actions(定時実行)
- 音声処理: ffmpeg で結合・音量調整・MP3変換
番組の履歴管理
- 過去に取り上げたテーマと使った素材を記録し、同じ話の繰り返しを防いでいます
- 価値観ラヂオはエピソード番号を自動で連番管理
主要ファイル
scripts/
├── generate-codex.py 台本生成のメイン処理
│ ├── Obsidianから思考ログ・ブックマーク・日記を収集
│ ├── 過去に使ったテーマ・素材の重複チェック
│ └── チャンネル別にプロンプトを組み立て
├── tts-aivis.py 音声合成(台本 → MP3)
│ ├── 台本を話者1 / 話者2のセリフに分解
│ ├── 1行ずつ音声合成して連結
│ └── 番組リストへ新エピソードを追加
└── sync-codex-auth.sh 認証情報の自動更新
.github/workflows/radio.yml 毎日00:00の自動実行
技術的な見どころ
- 同じ話を繰り返さない工夫: 過去に使ったノートとテーマを履歴に記録し、素材を選ぶ段階で二重にチェックしています
- 配信履歴を消さないアップロード手順: 番組リストを「既存を取得 → 追記 → アップロード」の順で更新し、上書きで履歴が消える事故を防いでいます
- ローカルでもクラウドでも同じように動く: 実行環境の違いを環境変数で吸収し、同じプログラムを手動実行と定時実行の両方で使えます
- ログイン切れの予防: 数日で期限が切れる認証情報を、Macの定期実行で1日4回更新。深夜の自動配信が止まらないようにしました
- 待ち時間の短縮: 初回は5〜10分かかる音声モデルのダウンロード結果を保存して再利用しています