yurijmikhalevich/rclip

grep for images – local, offline image search for the terminal

rclip – 画像のgrep | rclip – grep for images

概要rclip は、自然言語、例となる画像、またはその両方を組み合わせて、自分のコンピュータ上の画像ファイルの内容を検索できるコマンドラインツールです。フォルダ内の画像のローカルな CLIP ベースの埋め込みインデックスを構築し、クエリに対して結果をランク付けします。これらすべては、データをクラウドに送信することなく行われます。

主な機能

  • テキストのみの検索 – 例: rclip "two parrots on a branch"
  • 画像による逆引き検索 – ローカルパスまたは URL を指定して、視覚的に類似した画像を取得します。
  • 混合/算術クエリ – テキストと画像の用語を組み合わせたり、減算したりできます。オプションで重み付けも可能です (2:golden retriever + ./pool.jpg - fruit)。
  • 増分インデックス作成 – 次回以降の実行では、新規または変更されたファイルのみが処理されるため、繰り返しの検索が高速になります。
  • インタラクティブなターミナル UI – Kitty グラフィックスをサポートするターミナル(Kitty, Ghostty, iTerm2, Konsole)で動作するサムネイルグリッドを表示します。キーボードショートカットを使用して、シェルを離れることなく、画像の閲覧、コピー、ダウンロード、または開くことができます。
  • 幅広いフォーマットのサポート – JPEG/PNG/WebP/TIFF/GIF および macOS/Windows 上のネイティブ HEIC。フラグを使用して実験的な RAW (arw, cr2, dng) もサポートします。
  • クロスプラットフォーム – Snap, AppImage, Homebrew formula, MSI インストーラー, および pip wheel としてパッケージ化されています。Linux, macOS (Apple Silicon のみ), Windows で動作します。

仕組み

  • OpenCLIP ViT-B/32 モデル(OpenAI の CLIP と同じアーキテクチャ)を使用して、画像とテキストの両方を 512 次元の埋め込みに変換します。
  • 埋め込みはフォルダごとにシンプルなインデックスとしてローカルに保存されます。クエリは、クエリの埋め込みと保存された画像の埋め込みとの間のコサイン類似度を計算することで回答されます。
  • すべての計算は CPU (または PyTorch のビルドが対応している場合は GPU) で行われるため、ツールはオフラインで動作し、写真をプライベートに保ちます。

一般的なワークフロー

# 初回実行 – 現在のフォルダのインデックスを構築します
cd ~/Photos && rclip "sunset over lake"

# 次回以降の実行は高速です(新規ファイルのみがインデックス化されます)
cd ~/Photos && rclip "two cats"

# インラインプレビュー付きのインタラクティブ UI
rclip --interactive

# 画像から画像への検索
rclip ./example.jpg

このツールは、他のコマンド(例: xargs cp, feh, またはカスタムスクリプト)にパイプで渡すために、プレーンなファイルパス (-f) を出力することもできます。

インストール方法

  • Linuxsudo snap install rclip (または AppImage をダウンロードするか、PyTorch CPU wheel を使用して pip install rclip を行う).
  • macOSbrew install yurijmikhalevich/tap/rclip (Apple Silicon) または pip install rclip.
  • Windows – 最新のリリースから MSI インストーラーをダウンロードするか、pip install rclip を行う.

ライセンス – MIT.

詳細情報 – ブログ記事、YouTube デモ、および短い論文が README からリンクされています。GitHub Discussions ページを通じて、議論や貢献が歓迎されています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • Dispatch
  • プロジェクト