NASに保存されている写真をDiscordから探す - Openclaw×Synology DS223
※リンクはアフィリエイト広告を含みます
子供が生まれてから、写真や動画のデータが増える一方でした。これまではGoogleフォトを利用していましたが、あっという間に10GB程度容量が増えていて危機感が芽生えました。
そこで導入したのが、SynologyのNAS「DS223」です。このNASで動かせる写真・動画管理アプリのSynology Photosについては、以前Google Photoからの乗り換えや、1年使ってみた感想をnoteにまとめました。
検索性に不満が出てきた
Synology Photosの検索機能は、正直なところGoogle Photoよりもかなり劣っていると思います。Google Photoなら、例えば「キャンプ」と検索するとかなり高い精度でキャンプの画像が出てきますし、画像内の文字も認識してくれます。一方、Synology Photosはこういった検索はほぼ不可能なので、アルバムを作って管理していくことが必要になってきます。写真を探す時は、基本的にはアルバム頼みとなります。そのため、検索性は圧倒的にGoogle Photoの方が高いです。
そこで、先日使い始めたOpenclawを使って、NASに保存された写真データスキャンさせインデックス化することで、写真の検索性能をあげられるのではないか、と考え、色々試してみました。
スキャンできるようになるまでの試行錯誤
動かすまでにかなり試行錯誤しました。やったことを順に記載していますが、結局④だけで事足りています。
①AIエージェント「Openclaw」でNASの写真データを全スキャンする
モデルはGemini 3 flashを始め、Antigravityで使えるモデルをfallbackに指定してスキャンを走らせました。テスト用のファイルを1000枚くらいピックアップして、以下の観点でテストを繰り返しました。結果、動作的な問題でうまくいきませんでした。
【✕】安定してスキャンできるか
深夜〜12時くらいまではほとんどMacに触っていないので、その間スキャンさせたかったのですが、様々な要因で10〜30分程度でスキャンが止まってしまう。大半がAIを使いすぎてリミットに引っかかる、でした。今回、スキャンしたい画像は8万枚を超えているため、安定してスキャンできることは譲れませんでした
【◯】写真の内容を正しくスキャンできるか
画像の内容を文章で表現すること、exifから住所を日本語で保存すること、HEICも正しくスキャンできることは確認できました
②AIエージェント「Openclaw」とローカルLLM「Ollama(で使うGemma 3 12B)」を連携してNASの写真データを全スキャンする
①の通りAntrigravity OAuthだとリミットに引っかかりますが、GeminiのAPIで動かすととてつもない金額になりそうだったので、少し前に話題になっていたOllamaを使って、ローカルでLLMを動かしてみることにしました。Ollamaは一般的なソフトのように、ローカルLLMをPCにインストールできるソフトのようです。





これまでに作ってきたスキャンのプログラムをベースに修正してもらいながら、テストのスキャンを繰り返して、30分ごとにスキャンを停止・再開すること+スキャン中にGeminiを使っているAIエージェントの監視頻度を下げることで、継続したスキャンが可能になりました。
③確実にAIエージェントに動いてもらうために:Discordへ自動投稿をする「make」を利用→無料枠では足りずに「n8n」に切り替え
AIエージェントは賢いようで、意外と◯時にxxして、というお願いを忘れがちな気がします。特に今回のように他に処理をしているとその傾向が強い気がします。30分ごとにスキャンを停止・再開させる・その時点でのログを吐き出させる、といったことをせず、そのままスキャンがエラーで止まっている、ということが何度もありました。こちらがチャットで呼びかけると反応してくれて、スキャンが止まっていることに気づく、という流れです。
Make | AI Workflow Automation Software & Tools
そこでmakeというサービスを試してみました。makeは色々なサービスと連携できる自動化ツールのようです。Discordへの自動投稿が可能で、この自動投稿でスキャンの稼働・停止等をコントロールする形にしました。makeでのDiscord投稿は安定して行えましたが、一方で投稿回数が今回の用途には足りないことがわかりました(無料アカウントでは月に1,000回までの実行(今回の用途の場合)が可能でしたが、30分おきに動かすと30日間の場合で1,440回と無料枠を超えてしまう)。

そこで、できることはmakeに近い、自分のローカル環境で動かせるn8nを使うことにしました。NAS(DS223)上で動かすことができ、インストールや設定方法がGeminiに確認しながら進めました。少し癖がありますが、設定が完了すれば同じ用に投稿は安定して行うことができています。
④Gemma 3 12Bのハルシネーションで頓挫し、方向性を変えてみる
適当なログを開いてみると、実際の画像の内容と全く異なるログになっていることがわかりました。プロンプトを調整してみましたが結局うまくいかず、方向性を変えることにしました。今回やりたいこととその前提をGeminiに伝えると以下のような提案がありました。

私がこれまで考えていた「1枚ずつ画像を読み込んで日本語のテキストに変換する」というやり方ではない方法で、8万枚のスキャンであっても一晩あれば終わるスピードで完了し、翌日には検索ができるようになりました。
これに加え、exifから位置情報を抜き出しそれも検索に使うようにしました。
実際に画像検索してみる
検索自体はAIエージェントが行うので、Openclawの窓口に設定しているDiscordから行います。検索は殆どの場合、1〜2分程度で終了します。
写真を検索する時、「昔撮った写真で、なんとなく覚えている写真を検索したい」というパターンか、「こんな写真あるかな」という感じで検索するパターンがあるのですが、どちらも最終的に欲しい画像にたどり着くことができました。
状況によっては日付がわかった時点で、その日付の写真をSynology Photos等で見に行くほうが早いかもしれません。
以下はイメージです。
①こんな写真あるかなパターン



②昔撮った写真で、なんとなく覚えている写真を検索したいパターン





モデルの使用量について

5回ほど検索をお願いした後の使用状況は以下です。大量に検索するとリミットに引っかかりそうな気がしますが、たまに使うくらいであればAntigravity OAuthでも問題なさそうです。
NASへ記録するだけから、対話で引き出せる状況へ
NASは導入したものの、思い出を「しまっておくもの」になってしまいつつあったところ、AIエージェントを組み合わせることで「いつでも簡単に引き出して楽しめるもの」に変えることができました。利便性だけで言えばGoogle Photoにすべてを預けたほうが楽だと思いますが、ストレージ容量を気にせず使えて、検索性を上げられたので、コスト的にはいい落とし所なのではないかと思います。
これを作る上で、自分で考えた方法だけでなく、前提とやりたいことを生成AIに与えて他の方法が無いかも検討する、というのは非常に重要だと思いました。最初からそうしていれば④の方法に一発でたどり着けた気がします。こちらが手段ありきでスタートしてしまうとAIもそれをどう実現するか?ということを考えてしまい、泥沼にハマる感じがしました。
また、こちらがちょっとインプットしたら画像を探してきてくれる、というのはすごく便利で、家事育児の隙間に探したいときにはとてもありがたさを感じています。
