AIVONY

ピアノ初心者 × AI/ツール作りを temptation bundling(抱き合わせ)した趣味プロジェクト。狙いは 上達速度ではなく 「辞めない × 楽しい」 の最大化。名は Claude(Opus) × 作品番号 Op.88 × ピアノ88鍵。

  • 状態:DESIGN.md の棚5要素(§5.1〜5.5)すべて最低限実装済み(2026-06-23)。正典は repo 直下 AIVONY/DESIGN.md。 旧名 opus-88/ から AIVONY/ に改名(2026-06-23)。
  • 実装済み:§5.5 生成 / §5.3 FSRS / §5.2 ジャーナルRAG / §5.4 演奏diff / §5.1 アンビエント可視化+MIDIライブロガー。
  • 起動方法:正典=コンテナ内python main.pyAIVONY/backend)→ http://localhost:8000。 host 直起動は start.bat(→start.ps1PORT=8010)でバックエンド+MIDIロガー+ブラウザを一括起動。 ※ Ollama (ollama serve) を先に起動(gemma4:12b 必須)、ピアノの電源も先に入れる。
  • 設定(2026-06-18)load_dotenv(override=False)。優先順位 env > .env(gitignore) > code default。 ground truth は code default(gemma4:12b/172.23.32.1)と .env.example。起動時 resolved 行を出力。

実装構成(2026-06-17 時点)

ファイル役割
AIVONY/backend/main.pyFastAPI バックエンド(ABC生成・ジャーナル・ジャーナルRAG・FSRS・MIDIログ配信)
AIVONY/backend/diff.py演奏 vs 参照の diff(編集距離アライメント・自前実装)
AIVONY/host/midi_logger.pyWindowsホスト専用 MIDIライブロガー(mido + python-rtmidi)
AIVONY/web/index.html単一HTML フロントエンド(生成/ジャーナル/復習/ライブ の4タブ・abcjs 組み込み)
AIVONY/backend/data/cards.jsonFSRS カードデータ(自動生成)
AIVONY/backend/data/journal.md練習ジャーナル(追記式)
AIVONY/backend/data/midi_log.jsonlMIDIイベントログ(host が追記・コンテナが読む。gitignore)
AIVONY/start.bat / start.ps1host 一括起動(サーバ+MIDIロガー+ブラウザ)

4タブ構成

  • 生成タブ:調・種類(スケール/アルペジオ/メロディ/5指練習)・難易度・小節数を指定し、gemma4:12b → ABC記法 → abcjs で楽譜表示+Web Audio 再生。
  • ジャーナルタブ:練習メモを Markdown 形式で追記。生成フレーズをそのまま保存するボタンあり。さらに簡易RAGで過去ログに質問(bigram類似度検索→gemma4:12b)。
  • 復習タブ:曲名・パッセージを登録し FSRS 間隔反復(Again/Hard/Good/Easy の4択)で管理。
  • ライブタブ:MIDIロガーが書く midi_log.jsonl をポーリングし、弾いた音を canvas に発光ブロブで描画(音高=色相・velocity=大きさ)。

技術スタック

  • バックエンド:FastAPI + httpx + fsrs + pydantic + uvicorn + numpy(diff用)
  • フロントエンド:Vanilla JS + abcjs(楽譜表示・Web Audio 再生)+ Canvas2D(ライブ可視化)
  • MIDIキャプチャ:mido + python-rtmidi(Windowsホスト専用=コンテナの壁)
  • Ollama 接続:WSL2 → Windows ホスト IP 172.23.32.1:11434(start.ps1 ではホスト側なので localhost:11434

妥協ポイント(§8通り・正典に詳細)

  • ジャーナルRAGは embedding→Chroma ではなく bigram類似度(手元 Ollama が --embeddings 無し起動だったため)。
  • 演奏diff は partitura のアライメント機能が存在せず編集距離DPで自前実装。参照は今のところ生成スケールのみ。
  • ライブ可視化は音響レイヤー(M2)未使用で MIDI velocity のみの近似。

通底原則

純度と制御は気軽に妥協していい。目的(辞めない × 楽しい)だけは妥協しない。 最大の罠は「道具作りが練習を食うこと」=ツールの完成度は成果物にしない(§3)。

status/tags の正は正典(AIVONY/DESIGN.md)。この地図は派生。