{"id":48566094,"url":"https://github.com/andyyyy64/vida","last_synced_at":"2026-04-08T13:01:11.094Z","repository":{"id":341378357,"uuid":"1165405629","full_name":"Andyyyy64/vida","owner":"Andyyyy64","description":"vida — your life, remembered. A personal AI that watches, remembers, and analyzes your daily life.","archived":false,"fork":false,"pushed_at":"2026-04-07T14:16:58.000Z","size":4768,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-07T15:32:59.610Z","etag":null,"topics":["ai","gemini","life-logging","personal-ai","productivity","python","quantified-self","react","self-hosted","sqlite","tauri","typescript","vida"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Andyyyy64.png","metadata":{"files":{"readme":"README.ja.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-24T06:05:54.000Z","updated_at":"2026-04-07T14:17:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Andyyyy64/vida","commit_stats":null,"previous_names":["andyyyy64/homelife.ai","andyyyy64/david","andyyyy64/vida"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Andyyyy64/vida","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Andyyyy64%2Fvida","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Andyyyy64%2Fvida/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Andyyyy64%2Fvida/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Andyyyy64%2Fvida/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Andyyyy64","download_url":"https://codeload.github.com/Andyyyy64/vida/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Andyyyy64%2Fvida/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31556239,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","gemini","life-logging","personal-ai","productivity","python","quantified-self","react","self-hosted","sqlite","tauri","typescript","vida"],"created_at":"2026-04-08T13:01:10.033Z","updated_at":"2026-04-08T13:01:11.076Z","avatar_url":"https://github.com/Andyyyy64.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vida\n\n\u003e *vida* — スペイン語で「人生」。あなたの毎日を、記憶する。\n\n[![CI](https://github.com/Andyyyy64/vida/actions/workflows/ci.yml/badge.svg)](https://github.com/Andyyyy64/vida/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Version](https://img.shields.io/badge/version-0.2.3-green.svg)](https://github.com/Andyyyy64/vida/releases)\n[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey.svg)]()\n[![Live Demo](https://img.shields.io/badge/Live%20Demo-Open-blue)](https://vida-demo-phi.vercel.app)\n\n[English](README.md) | **日本語**\n\nあなたの日常をそっと見守り、すべてを記憶し、時間の使い方を可視化するパーソナルAI。\n\n### ライブデモ\n\nブラウザでvidaの模擬セッションを体験できます。デモは実際のUIに生成データと仮想ライブフィードを組み合わせており、カメラやマイクの設定なしで製品を理解できます。\n\n**[デモを開く](https://vida-demo-phi.vercel.app)**\n\n## クイックスタート\n\n\u003e **前提条件:** Python 3.12+、Node.js 22+、[uv](https://docs.astral.sh/uv/)、[Gemini APIキー](https://aistudio.google.com/)\n\u003e 未インストールの場合は[セットアップガイド](getting-started.ja.md)を参照してください。\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWindows（PowerShell）— 5分\u003c/b\u003e\u003c/summary\u003e\n\n```powershell\n# 1. クローン \u0026 インストール\ngit clone https://github.com/Andyyyy64/vida.git\ncd vida\nuv sync\ncd web; npm install; cd ..\n\n# 2. APIキーを設定\n\"GEMINI_API_KEY=your-key-here\" | Out-File -Encoding utf8 .env\n# 初回起動後は、アプリ内の設定パネルからもAPIキーを設定できます。\n\n# 3. デスクトップアプリを起動\ncd web; npx tauri dev\n```\n\n\u003e **権限:** 起動時にカメラ・マイクへのアクセスを求められたら、**設定 → プライバシーとセキュリティ**で許可してください。\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003emacOS（ターミナル）— 5分\u003c/b\u003e\u003c/summary\u003e\n\n```bash\n# 1. クローン \u0026 インストール\ngit clone https://github.com/Andyyyy64/vida.git\ncd vida\nuv sync\ncd web \u0026\u0026 npm install \u0026\u0026 cd ..\n\n# 2. APIキーを設定\necho \"GEMINI_API_KEY=your-key-here\" \u003e .env\n# 初回起動後は、アプリ内の設定パネルからもAPIキーを設定できます。\n\n# 3. デスクトップアプリを起動\ncd web \u0026\u0026 npx tauri dev\n```\n\n\u003e **権限:** ターミナルアプリに対して、**システム設定 → プライバシーとセキュリティ**でカメラ・マイク・画面収録・アクセシビリティを許可してください。詳細は[macOS権限ガイド](getting-started.ja.md#5-macos-のプライバシー権限)を参照。\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eLinux / WSL2\u003c/b\u003e\u003c/summary\u003e\n\n```bash\ngit clone https://github.com/Andyyyy64/vida.git\ncd vida\nuv sync\ncd web \u0026\u0026 npm install \u0026\u0026 cd ..\necho \"GEMINI_API_KEY=your-key-here\" \u003e .env\n# 初回起動後は、アプリ内の設定パネルからもAPIキーを設定できます。\n\n# デーモン + Web UIを起動\n./start.sh\n# デスクトップアプリが自動で開きます\n```\n\nWSL2でのカメラ設定（usbipd）については[セットアップガイド](getting-started.ja.md#windows-wsl2)を参照。\n\n\u003c/details\u003e\n\n**動作確認:**\n\n```bash\nlife look      # フレームを1枚撮影して分析\nlife status    # デーモンの状態確認\n```\n\nデスクトップアプリが自動的に開きます。ビルド済みインストーラーは [Releases](https://github.com/Andyyyy64/vida/releases) からダウンロードできます。\n\n---\n\n## 目次\n\n- [ビジョン](#ビジョン)\n- [機能](#機能)\n- [アーキテクチャ](#アーキテクチャ)\n- [プロジェクト構造](#プロジェクト構造)\n- [セットアップ](#セットアップ) — 必要要件、設定、Docker\n- [CLIコマンド](#cliコマンド)\n- [設定リファレンス](#設定)\n- [IPCコマンド](#ipcコマンド)\n- [データベーススキーマ](#データベーススキーマ)\n- [技術スタック](#技術スタック)\n\n## ビジョン\n\n**「人生を監視し、管理し、分析する。」**\n\n3つの柱:\n\n1. **監視** — カメラ・画面・音声・アプリフォーカスを継続的に自動記録。手動入力は一切不要。\n2. **管理** — 「あのとき何してた？」に即答できる外部化された記憶。日記不要の全文検索可能なログ。\n3. **分析** — 「どれだけ集中できた？」「時間をどこに使った？」を日次・週次・月次のパターンで可視化。\n\n## 機能\n\n### キャプチャ・センシング\n\n- **インターバルキャプチャ** — ウェブカメラ・画面・音声を30秒ごとに記録（設定変更可）。その間も1秒ごとに変化を検出し、大きな変化があれば追加フレームを保存（画面: 10%閾値、カメラ: 15%知覚ハッシュ差）。\n- **フォアグラウンドウィンドウ追跡** — Win32 P/Invoke（`GetForegroundWindow`）を使ったPowerShellプロセスで500msごとにアプリのフォーカス変化を記録。プロセス名とウィンドウタイトルを取得し、アプリ別の正確な使用時間を算出。\n- **在席検出** — Haarカスケード顔検出 + MOG2モーション解析によるヒステリシス状態機械（在席 → 離席 → 就寝）。3回連続で顔未検出になるまで遷移しない。設定した夜間時間帯に画面が暗い場合は就寝と判定。\n- **音声キャプチャ・文字起こし** — ALSAで自動デバイス検出・録音。無音トリミング（振幅500閾値、最低0.3秒の発話）で意味のある音声のみ保存。LLMがユーザーコンテキストを踏まえて文字起こし。\n- **ライブフィード** — ポート3002でMJPEGストリーミング（約30fps）。メインキャプチャとは独立して動作。\n\n### AI分析\n\n- **フレーム分析** — 毎ティックにカメラ画像・画面キャプチャ・音声・ウィンドウ情報をLLM（GeminiまたはClaude）に送信。アクティビティカテゴリと自然言語説明をJSON形式で取得。\n- **アクティビティ分類** — LLMが既知カテゴリから選択（新カテゴリは自動登録）。LCS類似度（≥0.7）でファジーマッチング・正規化。アクティビティ→メタカテゴリのマッピングは`activity_mappings`テーブルで管理。`life consolidate-activities`コマンドでLLMが類義語・表記ゆれをまとめてマージ可能。\n- **メタカテゴリ** — アクティビティを6つのメタカテゴリに動的マッピング: **focus（集中作業）**, **communication（コミュニケーション）**, **entertainment（エンタメ）**, **browsing（ブラウジング）**, **break（休憩）**, **idle（アイドル）**。\n- **マルチスケールサマリー** — 階層的に生成: 10分（生フレームから）→ 30分 → 1時間 → 6時間 → 12時間 → 24時間（キーフレーム画像・文字起こし・改善提案含む）。\n- **日次レポート** — 日付変更時に自動生成。アクティビティ内訳・タイムライン・集中度（集中フレーム/アクティブフレーム）・イベント一覧を含む。Webhookで配信。\n- **コンテキスト認識** — ユーザープロファイル（`data/context.md`）と直近5フレームの履歴を毎回のLLMプロンプトに注入。\n\n### Web UI\n\n- **タイムライン** — フレームを時間帯でグループ化、モーションスコアでサイズ調整、メタカテゴリで色付け。キーボード（矢印キー）とスクロールホイールでフレーム切り替え。\n- **詳細パネル** — カメラ画像（クリックで拡大）、画面キャプチャ（メイン + 変化検出分のサムネイルストリップ）、音声プレイヤー + 文字起こし、ウィンドウ情報、全メタデータ。\n- **サマリーパネル** — スケール別（10分〜24時間）に展開・折りたたみ。サマリーをクリックするとタイムライン上の対応時間帯をハイライト。\n- **ダッシュボード** — 集中スコア%、メタカテゴリ別円グラフ、アクティビティ一覧（継続時間バー）、アプリ使用時間TOP10（切り替え回数付き）、週次スタックバーチャート、ガントスタイルセッションタイムライン。\n- **検索** — フレーム説明・文字起こし・アクティビティ・ウィンドウタイトル・サマリーをFTS5トライグラム全文検索。結果クリックで対象日時・フレームにジャンプ。\n- **アクティビティヒートマップ** — 24時間×フレーム数の強度ヒートマップ。\n- **ライブフィード** — LIVE/OFFLINEインジケーター付きリアルタイムMJPEGストリーム、フルスクリーンモーダルに拡大可能。\n- **モバイル対応** — 狭い画面ではタブ切り替え（サマリー / タイムライン / 詳細）のレスポンシブレイアウト。\n- **自動更新** — 今日のデータ表示時は30秒ごとにフレーム・サマリー・イベントをポーリング。\n\n### チャットプラットフォーム連携\n\nチャットの会話を収集して「外部化された記憶」を強化します。何を誰と話していたかという情報は、日常の活動記録に不可欠な次元を加えます。\n\n**アーキテクチャ:** 統一された`ChatSource`インターフェースによるアダプターパターン。`life.toml`で使うプラットフォームのみ有効化。\n\n| プラットフォーム | 状態 | 方式 | DM | サーバー/グループ |\n|---|---|---|---|---|\n| **Discord** | 実装済み | REST APIポーリング（ユーザートークン） | ✓ | ✓ |\n| **LINE** | 計画中 | チャット履歴エクスポート | ✓ | ✓ |\n| **Slack** | 計画中 | Botトークン + Events API | — | ✓ |\n| **Telegram** | 計画中 | Bot API / TDLib | ✓ | ✓ |\n| **WhatsApp** | 計画中 | チャット履歴エクスポート | ✓ | ✓ |\n| **Teams** | 計画中 | Microsoft Graph API | ✓ | ✓ |\n\n**動作フロー:**\n1. プラットフォームアダプターがバックグラウンドスレッドで新着メッセージをポーリング\n2. メッセージを`chat_messages`テーブルに統一スキーマで保存\n3. 直近の会話をLLMプロンプトに注入 — フレーム分析が「Discordでこの話題を議論していた」という情報を受け取る\n4. 日次レポートにチャット活動サマリー（チャンネル別メッセージ数）を含む\n\n## アーキテクチャ\n\n```\ndaemon/ (Python)         tauri/ (Rust)             frontend (React)\n  ├─ カメラキャプチャ      ├─ IPCコマンド             ├─ タイムライン\n  ├─ 画面キャプチャ        ├─ rusqliteクエリ          ├─ フレーム詳細\n  ├─ 音声キャプチャ        ├─ アセットプロトコル       ├─ サマリーパネル\n  ├─ ウィンドウ監視        ├─ デーモン管理            ├─ ライブフィード\n  ├─ 在席検出             └─ システムトレイ           ├─ ダッシュボード\n  ├─ LLM分析                                        ├─ 検索\n  ├─ サマリー生成                                    ├─ ヒートマップ\n  ├─ レポート生成                                    └─ モバイル対応\n  ├─ チャット連携\n  ├─ 変化検出\n  ├─ SQLite 書き込み\n  └─ MJPEGライブサーバー (port 3002)\n```\n\n- デーモンがSQLiteに書き込み、WebサーバーがWALモードで読み取り（同時アクセス対応）\n- ウィンドウモニターは独立したSQLite接続を持つ永続PowerShellプロセスで動作\n- 共有`data/`ディレクトリ: `frames/`, `screens/`, `audio/`, `life.db`\n- LLMプロバイダーは抽象化: Gemini または Claude、`life.toml`で設定\n\n### スレッドモデル\n\n| スレッド | 役割 | レート |\n|---|---|---|\n| メインループ | キャプチャ + 分析 + サマリー生成 | 30秒ごと（設定可） |\n| ライブフィード | ウェブカメラ → MJPEGストリーム | 約30fps |\n| 音声録音 | インターバル中のALSA録音 | ティックごと |\n| ウィンドウモニター | PowerShell → `window_events`テーブル | 500msポーリング |\n| 変化検出 | 画面/カメラのハッシュ比較 | ティック間で1秒ごと |\n| チャットポーラー | Discord等 → `chat_messages`テーブル | 60秒ごと（設定可） |\n| ライブHTTPサーバー | MJPEGをクライアントに配信 | オンデマンド |\n\n## プロジェクト構造\n\n\u003cdetails\u003e\n\u003csummary\u003eクリックして展開\u003c/summary\u003e\n\n```\ndaemon/                  # Pythonパッケージ\n  ├─ cli.py              # CLIエントリポイント (Click)\n  ├─ daemon.py           # メイン観測ループ\n  ├─ config.py           # TOML設定読み込み\n  ├─ analyzer.py         # フレーム分析 + サマリー生成\n  ├─ activity.py         # ActivityManager: DB管理の正規化 + メタカテゴリマッピング\n  ├─ report.py           # 日次レポート生成\n  ├─ notify.py           # Discord / LINE Webhook通知\n  ├─ live.py             # MJPEGストリーミングサーバー\n  ├─ chat/               # チャットプラットフォーム連携\n  │   ├─ base.py         # 抽象ChatSourceインターフェース\n  │   ├─ discord.py      # Discordアダプター（ユーザートークン、RESTポーリング）\n  │   └─ manager.py      # ChatManager: アダプターを統括\n  ├─ llm/                # LLMプロバイダー抽象化\n  │   ├─ base.py         # 抽象基底クラス\n  │   ├─ gemini.py       # Google Gemini（画像・音声対応）\n  │   └─ claude.py       # Anthropic Claude（CLI経由）\n  ├─ capture/            # データキャプチャモジュール\n  │   ├─ camera.py       # ウェブカメラ（V4L2 / AVFoundation）\n  │   ├─ screen.py       # 画面キャプチャ（PowerShell / screencapture）\n  │   ├─ audio.py        # 音声録音（ALSA / sounddevice）\n  │   ├─ window.py       # フォアグラウンドウィンドウ監視（PowerShell+Win32 / osascript）\n  │   └─ frame_store.py  # JPEGファイルストレージ\n  ├─ analysis/           # ローカル分析（LLM不使用）\n  │   ├─ motion.py       # MOG2背景差分\n  │   ├─ scene.py        # 輝度分類\n  │   ├─ change.py       # 知覚ハッシュ変化検出\n  │   ├─ presence.py     # 顔検出 + 状態機械\n  │   └─ transcribe.py   # 音声 → テキスト（LLM経由）\n  ├─ summary/            # サマリーフォーマット\n  │   ├─ formatter.py    # CLI出力フォーマット\n  │   └─ timeline.py     # タイムラインデータ構築\n  ├─ claude/             # Claude固有機能\n  │   ├─ analyzer.py     # レビュー分析\n  │   └─ review.py       # 日次レビューパッケージ生成\n  └─ storage/            # データベース層\n      ├─ database.py     # SQLiteスキーマ、マイグレーション、クエリ\n      └─ models.py       # Frame, Event, Summary, Report データクラス\n\nweb/                     # Tauri v2 デスクトップアプリ\n  ├─ src-tauri/\n  │   ├─ src/lib.rs      # アプリ設定、daemon管理、トレイ\n  │   ├─ src/db.rs       # SQLite接続、設定、キャッシュ\n  │   ├─ src/commands/   # IPCコマンドハンドラー（18モジュール）\n  │   └─ tauri.conf.json # アプリ設定、バンドルリソース\n  └─ src/\n      ├─ App.tsx         # メインSPAオーケストレーター\n      ├─ components/     # Reactコンポーネント\n      ├─ hooks/          # 30秒ポーリングのデータフェッチ\n      └─ lib/            # IPCクライアント、型、アクティビティモジュール、ユーティリティ\n\ndata/                    # 実行時データ（gitignore済み）\n  ├─ frames/             # カメラJPEG (YYYY-MM-DD/*.jpg)\n  ├─ screens/            # 画面PNG (YYYY-MM-DD/*.png)\n  ├─ audio/              # 音声WAV (YYYY-MM-DD/*.wav)\n  ├─ live/               # 現在のMJPEGストリームフレーム\n  ├─ context.md          # LLM用ユーザープロファイル\n  ├─ life.db             # SQLiteデータベース（WALモード）\n  └─ life.pid            # デーモンPIDファイル\n```\n\n\u003c/details\u003e\n\n## セットアップ\n\nプラットフォーム別の詳細手順は **[getting-started.ja.md](getting-started.ja.md)** を参照してください。\n\n| プラットフォーム | ガイド |\n|---|---|\n| Windows（ネイティブ） | [getting-started.ja.md#windows-native](getting-started.ja.md#windows-native) |\n| Windows (WSL2) | [getting-started.ja.md#windows-wsl2](getting-started.ja.md#windows-wsl2) |\n| Mac | [getting-started.ja.md#mac](getting-started.ja.md#mac) |\n\n### 必要要件\n\n| | Windows（ネイティブ） | Windows (WSL2) | Mac |\n|---|---|---|---|\n| Python | 3.12+（Windows） | 3.12+（WSL2内） | 3.12+ |\n| Node.js | 22+（Windows） | 22+（WSL2内） | 22+ |\n| カメラ | 内蔵 / USB（DirectShow） | 外付けUSB（usbipd経由） | 内蔵カメラ |\n| マイク | 内蔵 / USB（WASAPI） | 外付けUSB（usbipd経由） | 内蔵マイク |\n| 画面キャプチャ | PowerShell + Windows Forms | PowerShell + Windows Forms | `screencapture`（内蔵） |\n| ウィンドウ監視 | PowerShell + Win32 API | PowerShell + Win32 API | `osascript`（内蔵） |\n| Gemini APIキー | 必要 | 必要 | 必要 |\n\n### 設定\n\n設定はデスクトップアプリの**設定UI**で管理されます（`data/life.db`の`settings`テーブルに保存）。初回起動時にデフォルト値が自動適用されます。CLIのみで使用する場合は、`life.toml`と`.env`がフォールバックとして機能します。\n\n**ヒント:** `data/context.md`に名前・職業・習慣を書くと、AIがより正確なアクティビティ説明を生成します。\n\n全オプションは[下記の設定リファレンス](#設定-1)を参照してください。\n\n### Docker\n\n```bash\ndocker compose up\n```\n\nカメラ・音声デバイスのパススルーは`docker-compose.override.yml`で設定。詳細は[セットアップガイド](getting-started.ja.md)を参照。\n\n## CLIコマンド\n\n| コマンド | 説明 |\n|---|---|\n| `life start [-d]` | 観測デーモンを起動（`-d`でバックグラウンド） |\n| `life stop` | デーモンを停止 |\n| `life status` | 状態を表示（フレーム数、サマリー数、ディスク使用量） |\n| `life capture` | テストフレームを1枚撮影 |\n| `life look` | フレームを撮影してすぐに分析 |\n| `life recent [-n 5]` | 直近のフレーム分析を表示 |\n| `life today [DATE]` | その日のタイムラインを表示 |\n| `life stats [DATE]` | 日次統計を表示 |\n| `life summaries [DATE] [--scale 1h]` | サマリーを表示（10m/30m/1h/6h/12h/24h） |\n| `life events [DATE]` | 検出イベントを一覧表示 |\n| `life report [DATE]` | 日次日記レポートを生成 |\n| `life review [DATE] [--json]` | レビューパッケージを生成 |\n| `life consolidate-activities` | LLMでアクティビティカテゴリの類義語をマージ |\n| `life notify-test` | Webhook通知のテスト送信 |\n\n## 設定\n\n設定はデスクトップアプリの**設定UI**で管理されます（`data/life.db`の`settings`テーブルに保存）。CLIのみで使用する場合は`life.toml`と`.env`がフォールバックとして機能します。以下は利用可能な設定キー（DBキー名）です:\n\n| キー | デフォルト | 説明 |\n|------|-----------|------|\n| `data_dir` | `\"data\"` | データディレクトリパス |\n| `capture.device` | `0` | カメラデバイスID (/dev/videoN) |\n| `capture.interval_sec` | `30` | キャプチャ間隔（秒） |\n| `capture.width` | `640` | キャプチャ幅 |\n| `capture.height` | `480` | キャプチャ高さ |\n| `capture.jpeg_quality` | `85` | JPEG品質 |\n| `capture.audio_device` | `\"\"` | 音声デバイス（空欄 = 自動検出） |\n| `capture.audio_sample_rate` | `44100` | 音声サンプルレート |\n| `analysis.motion_threshold` | `0.02` | MOG2前景ピクセル比率 |\n| `analysis.brightness_dark` | `40.0` | これ以下 = DARK |\n| `analysis.brightness_bright` | `180.0` | これ以上 = BRIGHT |\n| `llm.provider` | `\"gemini\"` | \"gemini\" または \"claude\" |\n| `llm.claude_model` | `\"haiku\"` | Claudeモデル名 |\n| `llm.gemini_model` | `\"gemini-3.1-flash-lite-preview\"` | Geminiモデル名 |\n| `presence.enabled` | `true` | 在席検出の有効化 |\n| `presence.absent_threshold_ticks` | `3` | 離席判定までのティック数 |\n| `presence.sleep_start_hour` | `23` | 就寝検出開始時刻 |\n| `presence.sleep_end_hour` | `8` | 就寝検出終了時刻 |\n| `notify.provider` | `\"discord\"` | \"discord\" または \"line\" |\n| `notify.webhook_url` | `\"\"` | Webhook URL |\n| `notify.enabled` | `false` | 通知の有効化 |\n| `chat.enabled` | `false` | チャット連携のマスタースイッチ |\n| `chat.discord.enabled` | `false` | Discordアダプターの有効化 |\n| `chat.discord.user_token` | `\"\"` | Discordユーザートークン |\n| `chat.discord.user_id` | `\"\"` | DiscordユーザーID |\n| `chat.discord.poll_interval` | `60` | ポーリング間隔（秒） |\n| `chat.discord.backfill_months` | `3` | 初回起動時の過去履歴取得月数（0でスキップ） |\n\n## IPCコマンド\n\nフロントエンドはHTTPエンドポイントではなく、Tauriの`invoke()`コマンドでRustバックエンドと通信します。コマンドは`web/src-tauri/src/commands/`で定義されています。\n\n| コマンド | モジュール | 説明 |\n|---------|----------|------|\n| `get_frames` | frames | 指定日のフレーム一覧 |\n| `get_frame` | frames | IDでフレームを取得 |\n| `get_latest_frame` | frames | 最新フレームを取得 |\n| `get_summaries` | summaries | 日付・スケール別サマリー一覧 |\n| `get_events` | events | 指定日のイベント一覧 |\n| `get_stats` | stats | 日次統計（カウント、平均、時間別アクティビティ） |\n| `get_activities` | stats | アクティビティ別内訳（継続時間・時間別詳細） |\n| `get_apps` | stats | ウィンドウイベントからのアプリ使用時間（切り替え回数付き） |\n| `get_dates` | stats | データのある日付一覧 |\n| `get_range_stats` | stats | 期間別日次統計（メタカテゴリ内訳付き） |\n| `get_sessions` | sessions | アクティビティセッション（連続フレームのグループ化） |\n| `get_report` | reports | 日次レポート取得 |\n| `list_reports` | reports | 最近のレポート一覧 |\n| `list_activities` | activities | アクティビティカテゴリ一覧（メタカテゴリ付き） |\n| `get_activity_mappings` | activities | アクティビティ → メタカテゴリ マッピングテーブル |\n| `search_text` | search | 全文検索（フレーム + サマリー） |\n| `export_frames_csv` | export | フレームをCSVでエクスポート |\n| `export_summaries_csv` | export | サマリーをCSVでエクスポート |\n| `export_report` | export | 日次レポートをJSONでエクスポート |\n| `get_live_frame` | live | ライブフィードのJPEGスナップショット |\n| `get_settings` | settings | DB設定を取得 |\n| `put_settings` | settings | DB設定を更新 |\n| `get_memo` | memos | 指定日のメモを取得 |\n| `put_memo` | memos | 指定日のメモを保存 |\n| `get_context` | context | ユーザープロファイルを取得 |\n| `put_context` | context | ユーザープロファイルを更新 |\n| `get_devices` | devices | カメラ・音声デバイスの列挙 |\n| `get_status` | status | デーモン状態・データディレクトリ情報 |\n| `get_data_dir` | status | データディレクトリパスを取得 |\n| `get_chat` | chat | 指定日のチャットメッセージを取得 |\n| `ask_rag` | rag | RAGベースの質問応答 |\n| `get_data_stats` | data | データストレージ統計 |\n| `export_table` | data | データベーステーブルのエクスポート |\n\n## データベーススキーマ\n\n\u003cdetails\u003e\n\u003csummary\u003eクリックして展開\u003c/summary\u003e\n\n### frames\nコアキャプチャデータ: タイムスタンプ、カメラパス、画面パス、追加画面パス、音声パス、文字起こし、輝度、モーションスコア、シーンタイプ、LLM説明、アクティビティカテゴリ、フォアグラウンドウィンドウ。\n\n### window_events\nウィンドウモニターが記録するフォーカス変化イベント: タイムスタンプ、プロセス名、ウィンドウタイトル。`LEAD()`ウィンドウ関数で正確なアプリ使用時間を算出。\n\n### summaries\nマルチスケールサマリー（10分〜24時間）: タイムスタンプ、スケール、内容、フレーム数。\n\n### events\n検出イベント: シーン変化、モーションスパイク、在席状態変化。元フレームに紐付け。\n\n### activity_mappings\n動的なアクティビティ → メタカテゴリマッピング。アクティビティ名が主キー。`meta_category`、初回記録時刻、フレーム数を保持。マイグレーション時に既存フレームからシード。LLMが新アクティビティを生成するたびに自動更新。\n\n### reports\n日次自動生成レポート: 内容、フレーム数、集中度%。\n\n### chat_messages\nチャットプラットフォームから収集したメッセージ: プラットフォーム、プラットフォーム固有メッセージID、チャンネル/サーバー情報、著者、is_selfフラグ、内容、タイムスタンプ、添付ファイル/埋め込みのJSONメタデータ。(platform, platform_message_id)でユニーク制約。\n\n### memos\n日次ユーザーメモ: 日付（主キー）、内容、更新日時。当日のみ編集可、過去は読み取り専用。\n\n### FTSインデックス\n`frames_fts`（トライグラム）: description, transcription, activity, foreground_window。`summaries_fts`（トライグラム）: content。\n\n\u003c/details\u003e\n\n## 技術スタック\n\n- **デーモン**: Python 3.12 / Click / OpenCV / SQLite（WALモード）\n- **LLM**: Google Gemini（画像・音声）/ Anthropic Claude（CLI経由）\n- **ウィンドウ追跡**: PowerShell / Win32 P/Invoke（`GetForegroundWindow`）/ osascript（macOS）\n- **デスクトップ**: Tauri v2 / Rust / rusqlite / WebView2 (Windows) / WebKitGTK (Linux) / WKWebView (macOS)\n- **フロントエンド**: React 19 / TypeScript / Vite 6\n- **インフラ**: Docker Compose / WSL2 / macOS\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandyyyy64%2Fvida","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandyyyy64%2Fvida","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandyyyy64%2Fvida/lists"}