🎙️ 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. 実機構成(写真)

黒ノートPC上に外付けHDDとUSB接続されたLIFELOGレコーダー。手前にキーリング付き小型デバイスが充電中
撮影セットアップ例:上段の黒い筐体に 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. 全体アーキテクチャ(図)

LIFElog STT daily · cron 01:00 JST F: LIFELOG RECORD\*.WAV 録音入力 🟡 hermes_micro cron + pipeline ./run.sh run E: Buffalo 2026\yyyymmdd\ *.txt + *.WAV zettelkasten dagnetz/daily eternal 📓MMDD Discord origin thread 件数・要約のみ LLM 要約 gpt-5.6-luna FB: grok-4.3 日付キー = WAVファイル名の録音日(処理日ではない) · 1WAV = STT 1回だけ · txt成功後にのみ MOVE workdir: ~/.hermes/workspace/lifelog-stt · state.jsonl で idempotent

3. ステップ詳細フロー

0
Trigger
Hermes cron 0 1 * * *(JST 01:00) / job lifelog-record-stt-daily
deliver: origin(このスレ) workdir: lifelog-stt
1
DiscoverF:\RECORD\*.WAV を一覧
  • 書き込み中スキップ(mtime が直近15分以内)
  • ._* / 極小ファイル除外
  • すでに STT 済み(state / 既存 txt)はスキップ
2
Copy → Preprocess
  • WAV を WSL staging へコピー(PowerShell)
  • ffmpeg: highpass → denoise → silenceremove → loudnorm
  • 出力: 16kHz mono PCM(Whisper向け)
3
STT(local Whisper)
  • engine: faster-whisper / CPU int8
  • model: config の whisper.model_size(運用で small/medium 切替)
  • 1 WAV = ちょうど1回(再実行してもスキップ)
  • 失敗は state に記録し、その WAV は F: に残す
4
Write + Move
  • 全文: E:\2026\{yyyymmdd}\{stem}.txt(UTF-8)
  • yyyymmdd は WAVファイル名の録音日
  • txt が size>0 で成功してから原WAVを同フォルダへ MOVE
  • → LIFELOG(F:)の容量を空ける
5
日次要約(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 に入れない)
6
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 に全文・トークンを出さない
gitmd のみ。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.yamlwhisper.model_size が正。 medium 本線にするなら config と cron プロンプトを揃える。

7. 実績メモ(参考)