
2026/10/04 18:24
Show HN: macOS であらゆる写真と動画のすべてのフレームを検索する AI
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
SCM(スクリーン・メモリーズ)は、アカウントやクラウドアップロードを必要とせず、すべての写真および動画フレームを解析するローカルフーストの AI シアールツールを求めるプライバシー重視の macOS ユーザーにとって大きな飛躍を表します。推論をすべてデバイス上でローカルに行うことで、レンダラーによるサンドボックス化、ダウンロード時の SHA256 チェックサム検証、および完全なテレメトリ不在により、完全な機密性が確保されます。本アプリケーションは、OCR によるテキスト認識や Whisper を用いた正確な対話検索といった高度な標準技術を活用しており、これらはコアエンジンからの独立した動作により汎用性を高めています。インストールは Apple Silicon システム(macOS 12 以降)において Homebrew を介して簡略化されており、Bun パッケージランナーが自動的にカルアインティネーションフラグをクリアします。パフォーマンスのカスタマイズには、4 つの異なるビジョンモデル間の切り替えや、60 秒/ポイントからエネルギー効率重視のプリセットまで、2.5 秒/ポイントまでの超高速な動画セグメンテーション速度への調整が用意されています。自動インポートおよびバックグラウンド再埋め込みを含む自己維持ライブラリ機能により、データベースの更新が検索をブロックせずにシームレスに行われます。さらに、ファイル、シーン、OCR、対話、LLM の 5 つの検索モードはすべて、20 個までの保存可能なプロンプトを有する切り替え可能なタブとして保存でき、個人がメディアを探求することを完全な制御、速度、精度で可能にします。
本文
SCM (Screen Memories) - ローカル AI 動画・画像検索ツール
MacOS のあらゆるフォルダにある写真や動画を、深い AI 検索機能で管理するローカルフーストアプリケーションです。
🌟 主な特徴
- ローカル専用: アカウント不要、クラウド使用せず、アップロードもありません。推論はすべてお客様の Mac で完結します。
- 独自の検索ポイント:
- 思い通りの検索: 平易な言葉で「ある思い出」を説明するだけで OK。残りはビジョンモデルが処理します。
- 瞬間単位の検索: シーンがセグメント化されているため、ファイル全体ではなく特定のショット(カット)に即座に着地できます。
- テキストと音声の対応: OCR 機能によるテキスト検索と、Whisper を用いた正確な発話行ごとの検索が可能(独立したモード)。
- タブ管理: 任意のクエリをタブとして保存可能。スクリーンショットやメールタブはオン/オフ切り替え可能です。
- 自律的なライブラリ: 監視フォルダからの自動インポート、重複名前の排除(ハッシュ比較)、モデル切替時のバックグラウンド再埋め込みに対応。
- 真のプライバシー: メディアデータはマシンから流出しません。モデルは一度ダウンロードすれば完全にオフラインで動作します。
🚀 インストール方法 (Homebrew)
最も簡単な方法は Homebrew です(Apple Silicon、MacOS 12 以上対応)。 インストール時にクアランティンフラグが自動クリアされるため、手動設定不要です。
標準的なインストールとアップグレード
# タップを追加し、権限を付与してインストール brew tap allenv0/scm brew trust allenv0/scm brew install --cask allenv0/scm/scm # アップグレード時の動作も同様 brew upgrade --cask allenv0/scm/scm
最小限の権限設定
タップ全体ではなく、cask(アプリ)のみを信頼する場合があります。
brew tap allenv0/scm brew trust --cask allenv0/scm/scm brew install --cask scm
💻 開発環境とパッケージ化
依存関係のインストール
プロジェクトは Bun を使用します。
bun install
モデルの初回使用時に重みがダウンロードされます(デフォルトの CLIP は約 435MB)。以降は完全にオフラインで動作します。
コマンド実行例
bun run dev # レンダラーバンドルをビルドし、Electron アプリを起動 bun start # ビルドせずに Electron アプリを起動(開発時推奨) bun run build # レンダラーバンドルを dist/ へ再ビルドのみ実行
DMG / ZIP パッケージの構築
# キーチェーンにアイデンティティが登録されている場合(署名付き) bun run dist # コード署名の取得をスキップする場合は unsigned フラグを使用 bun run dist:unsigned
パッケージ化プロセス:
— React レンダラーをvite build
にコンパイル。dist/
— アプリをパッケージ化(electron-builder --mac
,main.js
, インデクサなどを含む)。preload.js
出力先:
dist-app/ (例:SCM-0.2.4.dmg)
🔍 5 つの検索モード
| モード | 対象・機能 |
|---|---|
| Files(ファイル) | ビジョンランク機能を用いたファイル全体の検索。ファイル名やフレーズによるブースト適用。 |
| Scenes(シーン) | 動画内の瞬間検索。ショット単位で検索し、タイムコードへジャンプ可能。 |
| OCR | 画像・フレーム上のテキストを検索。文字通りマッチング(Tesseract 対応:英語+35 言語)。 |
| Dialogue(会話) | 動画内の正確な発話言葉を検索(Whisper 対応)。段階的な精度設定あり。 |
| LLMs(オプトイン) | ローカルチャット機能。ダイアログ、OCR テキスト、ファイル名を証拠として引用付き回答を提供。 |
モード詳細解説
- Files: 入力直後からファイル名キーワード検索へ移行し、ビジョンモデルでスコアリング。「マッチした理由」バッジを表示。CJK クエリは重なり合うビグラムとして検索。
- Scenes: シーンセグメント全体をスコアリング。ヒットしたショットにはタイムコードが表示され、直進可能。ノイズフィルタにより「シーンマッチなし」と返す場合がある。各動画最大 3 シーンの抽出。
- OCR: 文字列の literal な照合(AI エンジンウォームアップ不要)。マッチ単語は琥珀色で枠付け。
- Dialogue: Whisperによる正確なリトリバル。埋め込みや閾値を使用せず、オフライン動作可能。Exact line/words/spoken の 3 タイアに分けられる。
- LLMs: オプトイン(設定で有効化必須)。llama.cpp サイドカー使用。質問に対する回答に証拠付き引用を表示(リアルタイムストリーミング)。「/screenshots」などでコーパスを絞り込み可能。
推奨チャットモデル
| モデル | サイズ | 備考 |
|---|---|---|
| Qwen3 1.7B (デフォルト) | 〜1.1GB | 高速な日常チャット;8GB Mac に適合 |
| Llama 3.2 3B | 〜2GB | より強力な長文回答;余裕が必要 |
📂 タブとライブラリ管理
- 閲覧タブ:
,All
(デフォルト)、Videos
、スクリーンショット
。後 2 つは「Smart Tabs」設定で切り替え可能。メール - プロンプト保存: 検索バー下のピンピルで現在のクエリとモードを保存(最大 20 タブ)。状態を正確に復元可能。
- ショートカットキー: ⌘1–⌘5 でセマンティックビュー切り替え、⌘I でインポート、⌘, で設定。
- 検索スコープ: 保存されたタブ(例:メールのみ)を選択し、その範囲に結果をフィルタリングして検索可能。
特殊なタブ機能
- Email タブ: クエリに含まれるメールアドレスを検出・表示。Tesseract が断片化したアドレスを組み立て直し、「gmail,com」や「allen [at] gmail [dot] com」なども対応。コピーまたは連絡先作成が可能。
- Screenshots タブ: リネーム耐性あり。ファイル名語彙、PNG/JPEG メタデータ、ソースフォルダヒントなど 4 つのシグナルで自動分類。Projects フォルダへ未分類のもの格納。
🧠 AI モデルと処理パイプライン
ビジョンモデル (ONNX Runtime)
ライブラリごとのアクティブなモデルが選択可能です。スイッチ時に全ライブラリがバックグラウンドで再埋め込みされます。
| モデル | 役割 | CPU スピード | ダウンロード容量 |
|---|---|---|---|
| CLIP ViT-L/14@336 (デフォルト) | 最高性能(リアルワールド動画シーン検索) | 〜480–570ms/img | 〜435MB |
| SigLIP-2-B/16 | 高速なバッチインポート | 〜50–100ms/img | 〜412MB |
| SigLIP-2-L/16@256 | 高詳細(小物、看板、テキスト) | 〜200ms/img | 〜850MB |
| SigLIP-B/16@384 | 最大詳細 | 〜480ms/img | 〜214MB |
動画検索パイプライン
がショット境界をスキャンし、設定密度にサンプリングされたプランを作成。ffmpeg- プセット選択(Eco / Balanced / Detailed / Ultra)でサンプリング間隔とセグメント数を調整可能。
- セグメントごとの埋め込みとポスター生成を行い、ショットプランをキャッシュ(パス+サイズ+mtime など)。
OCR (Tesseract)
- ビジョンモデルとは独立したワーカーで実行。英語常時有効+35 言語切り替え可能。
- 言語パックは一度ダウンロード後オフライン動作。マッチ箇所はインプレースハイライト。
- CJK テキストはスペースなしで結合し、断片されたフラグメントを再組み立て。
🔒 プライバシーとセキュリティ
- サンドボックス化: レンダラーは sandboxed app:// バンドル。contextIsolation 有効、OS サンドボックス利用。
- データ管理: メディアはアプリ管理のライブラリにコピーされ、ディスクからストリーム。テレメトリ・アカウント・アップロードは一切ありません。
- モデルダウンロード: マインプロセスワーカーのみが一度限りでダウンロード(Hugging Face 等)。sha256 で検証。
- ストレージ場所: データは
に格納(設定で変更可能)。~/Library/Application Support/scm
⚙️ 設定・ライブラリ管理
ライブラリ機能
- デデュペ: コピー前に SHA-256 ハッシュ計算。拡張子正規化。
- 命名埋め込みバージョン: 検索可能状態の時系列スナップショットを自動バックアップ優先で復元可能(上限 10 個)。
設定項目 (パネル)
Library, Appearance, Grid, Smart Tabs, Photo Search, Video Search, LLMs Chat, Global Shortcut, Keyboard, Menu Bar。
- テーマ: ライト/ダーク/システム対応、CRT スクリーンエフェクト。
- ツール: グローバルショートカット記録機能、オンボーディングツアー、背景作業トレイ(ポーズ機能付)。
🛠 テストとリビルド
ビルド最適化
- 最初のビルドは遅い(Electron バイナリと ffmpeg の初回ダウンロードのため)が、以後は高速。
で再ビルドすると、ソース変更を自動検知しキャッシュを使わずフレッシュなパッケージを生成。bun run dist
コマンド例
# 完全な検証バッテリー bun run test:all # CLIP インデクサのヘッドレススモークテスト bun run smoke:indexer # ユニットテスト(Electron 不要) bun test test/ # コード品質チェック bun run lint # eslint bun run format:check # prettier
プロジェクト構造概観
: Electron メインプロセスmain.js
: Context Bridge (window.memories)preload.js
: メインプロセスモジュール群main-lib/
: ワーカー(ビジョン/OCR/ASR)+動画ユーティリティindexer/
: React レンダラーsrc/
: ベンチ・E2E スクリプトscripts/
,test/
: テスト・ドキュメントMDs/
詳細なベンチマーク
bun run bench:inference bench:enrich bench:detect # JSON レポート出力先:MDs/bench-*