- デモURL:
- プレゼンURL:
チーム43(アテナ43)
メンバー: Ryuto Kawabata, Mio Tabayashi, Takahiro Namatame, Kouichi Mitsui, Yuya Kamijyo
GraphEase は、音声から自動で文字起こし・要約を行い、
ノート化/学習カード化/復習スケジュール化/要約のグラフィック化(Canvas)/音声読み上げ(TTS) までをワンストップで行える学習支援アプリです。
フロントは HTML/CSS/Vanilla JS、サーバは 音声処理・要約・TTS を担当します。
- 録音 → 自動文字起こし & 要約
- ブラウザのマイクから録音し、サーバへアップロード(
/api/transcribe_and_summarize) - 一覧(Recent)表示、詳細で原文/要約を閲覧
- ブラウザのマイクから録音し、サーバへアップロード(
- タイトル編集
/api/recordings/{id}/titleに POST して更新
- ノート(Notes)
- 「今の録音から取り込み」で要約をノート化
- 編集(見出し/箇条書き/ToDo/コード/リンク/引用などの簡易 Markdown)
- 検索/タグ/ピン留め/バージョン履歴/自動保存/プレビュー
- 学習カード(Study)
- 要約から「Q: / A:」「質問:/回答:」「設問:/解答:」を抽出しカード化
- フラッシュカード学習(表→裏→次)
- タイムライン(Timeline)
- 復習予定をローカルに保持・一覧表示(
/api/remindersから次回復習日時を取り込み)
- 復習予定をローカルに保持・一覧表示(
- グラフィック記録(Graphic Recording)
- 要約から「見出し・要点・キーワード・Q&A」を抽出し、Canvas 図版を生成 → PNG 保存
- TTS(読み上げ)
/api/tts/{id}?field=summary|transcriptで要約/原文を音声再生- 再生/停止トグル、先頭から再生、音量調整
- Record: 録音、一覧、詳細(原文/要約/タイトル編集)、TTS、グラフィック生成
- Notes: ノート作成・編集・検索・タグ・ピン・履歴・プレビュー・自動保存
- Timeline: 復習予定(ローカル保持)一覧
- Study: Q/A から作る学習カード、クイズ形式で学習
バックエンド実装は任意(例: FastAPI / Express / NestJS)。以下はフロントの期待する入出力です。
-
POST /api/transcribe_and_summarize
form-data:audio(blob),language(ja 等),duration_sec
resp:{ id, title, transcript, summary, created_at, duration_sec } -
GET /api/recordings
resp:[{ id, title, created_at, duration_sec }, ...] -
GET /api/recordings/{id}
resp:{ id, title, transcript, summary, created_at, duration_sec } -
POST /api/recordings/{id}/title
form-data:title
resp:{ ok: true, title } -
POST /api/recordings/{id}/resummarize_from_text
json:{ text, boost }
resp:{ summary }(入力の重要センテンスに重み付けして再要約) -
POST /api/reminders
form-data:recording_id,goal_date(任意) ordemo=true,email(任意)
resp:{ next_review_at } -
GET /api/tts/{id}?field=summary|transcript
音声ストリーム(audio/mpegなど)
- 録音:
MediaRecorderを使用。isTypeSupportedで MIME を選択(Safari 考慮) - アップロード: 録音停止時に
Blobを/api/transcribe_and_summarizeへ送信 →loadList()で一覧再取得 - 詳細表示:
openDetail(id)が/api/recordings/{id}を取得し、原文/要約を描画 - ノート:
- localStorage に
notesを保存(LS.get/LS.set) - 早見の Markdown レンダラ
MD.render()(見出し/リスト/ToDo/コード/リンク/引用/強調 など) - 800ms デバウンスの自動保存、バージョン履歴(最大20)
- 検索/タグ/ピン/プレビュー/ショートカット(Cmd/Ctrl+S/B/I)
- localStorage に
- Q/A 抽出:
extractQA()が「Q: / A:」「質問:/回答:」「設問:/解答:」を解析 →cardsに同期 - グラフィック:
parseSummaryForGraphic()で見出し/要点/キーワード/Q&A を抽出drawGraphicFromSummary()が Canvas に描画し、PNG 保存可能
- TTS:
initTTSControls(id, field)で音声ソース設定- 再生/停止トグル、先頭から再生、音量、クリーンアップの各ハンドラ
-
フロント: HTML / CSS / Vanilla JavaScript(依存ライブラリなし)
-
ブラウザ API: MediaRecorder / Canvas / Notification / localStorage
-
サーバ: 任意(例: Python FastAPI / Node.js Express など)
- 音声認識: 例) Whisper / 各種 Speech-to-Text API
- 要約: 例) LLM API(「要点・キーワード・Q&A」出力に最適化)
- TTS: 例) 各種 TTS API(SSML/日本語対応)
-
データ保存
- 録音・文字起こし・要約: サーバ側 DB(例: Postgres)やオブジェクトストレージ
- Notes / Cards / Timeline: ブラウザの
localStorage
index.html,app.js,styles.cssを任意の静的サーバで配信
例:npm i -g serve→serve .- バックエンドと同一オリジンでない場合は CORS を設定
/api/*を上記 API 仕様で実装.envに API キーや接続情報を設定- 例:
PORT=8080で起動し、フロントからは相対パス or 逆プロキシを利用
OPENAI_API_KEY(または利用する ASR/LLM/TTS の API キー)DATABASE_URL(使用時)TTS_VOICE(任意)MAX_RECORD_DURATION_SEC(録音上限など)
- マイク権限: 録音は HTTPS または
localhostのみで動作。権限許可必須 - MIME 非対応: Safari 向けに
audio/mp4;codecs=mp4aを候補に含める(実装済) - 自動再生ブロック: TTS は初回ユーザー操作内で
audio.play()を呼ぶ(実装済) - CORS: フロントと API が別オリジンならサーバで CORS 設定
- main へのデプロイ: ブランチ保護/権限でマージ不可の場合は PR を作成し管理者レビューを依頼
Cmd/Ctrl + S: 保存Cmd/Ctrl + B: 太字Cmd/Ctrl + I: 斜体
- Record タブで録音 → 自動で要約生成
- 「今の録音から取り込み」で Notes にノート化
- Study にカードが反映 → クイズ開始
- Record 詳細で TTS 再生、図版生成 → PNG 保存
- Timeline に復習予定を登録(デモ or 試験日)
TODO:(MIT など任意)
