🎙️ LIFELOG STT Cron フロー
job: lifelog-record-stt-daily
0 1 * * * JST
id: 25fa1a71b018
host: 🟡hermes_micro
ボイスレコーダー(LIFELOG / F:)に溜まった WAV を、毎日 JST 01:00(25時表記)に
ローカル Whisper で文字起こし → 外付け HDD(Buffalo / E:)へ退避 → zettelkasten 要約、まで自動実行する流れ。
1. 実機構成(写真)
撮影セットアップ例:上段の黒い筐体に USB 接続されたストレージ群。
青LED点灯=電源/認識中。STT 実行時は E:(Buffalo)を差したまま、
処理後のレコーダー(F:)は抜いて再録音してよい。
| 文字 | デバイス | 役割 |
| F: |
LIFELOG(ACTIONS USB DISK) |
録音本体。入力は F:\RECORD\*.WAV |
| E: |
BUFFALO HD-CD-A |
外部記憶。出力 E:\2026\yyyymmdd\ |
| WSL |
🟡hermes_micro |
cron / ffmpeg / Whisper / Hermes 要約 |
運用メモ
・処理中は E: を抜かない
・RECORD が空になったら F: レコーダーは抜いてOK(再録音)
・Windows 側ドライブは powershell.exe 経由で R/W
2. 全体アーキテクチャ(図)
3. ステップ詳細フロー
Trigger
Hermes cron 0 1 * * *(JST 01:00) / job lifelog-record-stt-daily
deliver: origin(このスレ)
workdir: lifelog-stt
Discover —
F:\RECORD\*.WAV を一覧
- 書き込み中スキップ(mtime が直近15分以内)
._* / 極小ファイル除外
- すでに STT 済み(state / 既存 txt)はスキップ
Copy → Preprocess
- WAV を WSL staging へコピー(PowerShell)
- ffmpeg: highpass → denoise → silenceremove → loudnorm
- 出力: 16kHz mono PCM(Whisper向け)
STT(local Whisper)
- engine:
faster-whisper / CPU int8
- model: config の
whisper.model_size(運用で small/medium 切替)
- 1 WAV = ちょうど1回(再実行してもスキップ)
- 失敗は state に記録し、その WAV は F: に残す
Write + Move
- 全文:
E:\2026\{yyyymmdd}\{stem}.txt(UTF-8)
- yyyymmdd は WAVファイル名の録音日
- txt が size>0 で成功してから原WAVを同フォルダへ MOVE
- → LIFELOG(F:)の容量を空ける
日次要約(Hermes headless)
- 主:
gpt-5.6-luna → 失敗時 grok-4.3
- 台帳:
zettelkasten/dagnetz/daily/yyyymmdd.md
- 日記リンク:
1000-eternal-daily/📓MMDD.md に ~200字 + wikilink
- git commit/push(mdのみ。音声バイナリは git に入れない)
Report
- Discord: 件数・失敗 stem・F:残・要約パス・commit URL
- 生の全文は貼らない(200字まで)
- RECORD 0件なら短報 or 沈黙相当
4. データ配置
F:\RECORD\
YYYY-MM-DD-HH-MM-SS.WAV ← 録音入力
E:\2026\{yyyymmdd}\
YYYY-MM-DD-HH-MM-SS.txt ← 全文(STT)
YYYY-MM-DD-HH-MM-SS.WAV ← 移動後アーカイブ
(比較用) *.medium.txt
~/.hermes/workspace/lifelog-stt/
config.yaml / run.sh / state.jsonl / logs/
transcripts/ ← 中間テキスト
zettelkasten/
dagnetz/daily/yyyymmdd.md ← 日次サマリ台帳
1000-eternal-daily/📓MMDD.md ← 200字 + [[リンク]]
5. ガード(壊さないための約束)
| 項目 | ルール |
| STT回数 | 1 WAV = 1回。state / 既存txt で永久スキップ(--force-stt のみ例外) |
| MOVE順序 | txt 成功後のみ WAV を E: へ |
| 日付 | 処理日ではなく 録音日(ファイル名) |
| 録音中 | mtime 15分ガードで触らない |
| 秘密 | Discord に全文・トークンを出さない |
| git | md のみ。WAV/大容量は E: のみ |
6. 手動コマンド
cd ~/.hermes/workspace/lifelog-stt
./run.sh status
./run.sh run # 日次と同じ本線
./run.sh run --date 20260809
./run.sh summarize --date 20260809 --force
cron 文言と config
job プロンプトに “Whisper small” と書かれている場合がある。
実際のモデルは config.yaml の whisper.model_size が正。
medium 本線にするなら config と cron プロンプトを揃える。
7. 実績メモ(参考)
- 手動一括(8/8前後): RECORD を空にし E: へ退避・要約まで成功
- cron 2026-08-10: last_status=ok、8/9 分 STT→MOVE→要約・git 成功
- small vs medium 同日比較: 精度はほぼ同着、所要は medium の方が長い