mcpField
M
moonlitlynx-food-run

moonlitlynx-food-run

github.com/gkwa生産性073 回インストール2 日前に更新
リポジトリ

moonlitlynx-food-run について

moonlitlynx-food-run は、指定された digiKam コレクション内のメディアを YAML メタデータで分類し、食べ物関連のファイルにタグを付けるスキルです。適用前に候補タグを報告し、確認後にデータベースを更新します。

主な機能

  1. 01未タグ・日付なしのメディアを検索
  2. 02YAML メタデータで分類
  3. 03食べ物の手掛かりに応じたタグ付け
  4. 04データベースのバックアップと更新
  5. 05タグの検証と実行結果の記録

活用シーン

  1. 01指定コレクション内の料理動画の分類
  2. 02食べ物と該当するサブカテゴリーのタグ付け
  3. 03データベース変更前の候補タグ確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gkwa/volcanicviper --skill moonlitlynx-food-run

インストール後、Claude Code で/moonlitlynx-food-runを入力して読み込まれたか確認します。

同梱ファイルREADME.mdtile.json

詳細

このスキルでできること

grouchygiraffe と shamblingshark のコレクション内で、digikam の保存済み検索「タグなし、または日付なし」に該当するメディアファイルを見つけ、YAML メタデータを読み取り、食品か食品以外かを分類して、適切な digikam タグを適用します。

タグを適用する前に、必ず見つかった内容を報告してください。

データベース

パス:~/Pictures/digikam4.db

実行するたびに、事前にバックアップしてください。

cp ~/Pictures/digikam4.db ~/Pictures/digikam4.db.bak.$(date +%Y%m%d_%H%M%S)

ファイルの検索

digikam の保存済み検索「タグなし、または日付なし」(id=42)は、次の SQL に相当します。

両方の条件を満たす必要があります(OR ではなく AND)。

SELECT i.name, ar.label
FROM Images i
JOIN Albums al ON al.id = i.album
JOIN AlbumRoots ar ON ar.id = al.albumRoot
LEFT JOIN ImageInformation ii ON ii.imageid = i.id
WHERE ar.label IN ('grouchygiraffe', 'shamblingshark')
AND i.id NOT IN (
  SELECT imageid FROM ImageTags
  WHERE tagid NOT IN (SELECT id FROM Tags WHERE name LIKE 'Color Label%')
)
AND (ii.creationDate IS NULL OR ii.creationDate < '1904-01-01T00:00:00')
ORDER BY ar.label, i.name;

Color Label% の除外は必須です。色ラベルタグだけが付いたファイルも、digikam の UI ではタグなしとして扱われます。

YAML ファイルの読み取り

grouchygiraffe のファイルの場合:/Users/mtm/pdev/taylormonacelli/grouchygiraffe/data/<shortcode>.yaml

拡張子を除いて shortcode を取得します(例:DZY_GI9tCs5.mp4 → DZY_GI9tCs5.yaml)。

/output 内の shamblingshark のファイルは UUID 名で、対応する YAML ファイルはありません。分類はスキップし、noyamldesc を適用してください。

各 YAML から uploader、title、description フィールドを読み取ります。

分類

食品 — food(id=109)と、該当するサブタグを適用します。

キーワードパターンサブタグdigikam id
sourdough, levain, batard, boule, bulk ferment, crumbsourdough113
salsa, enchilada sauce, tomatillo, salsa verde, salsa rojasalsa115
pepper, chile, jalapeño, chipotle, guajillo, cayennepeppers151
curry, masala, tikka, korma, biryani, desi, indianindian114
paneerpaneer123
soup, stew, broth, ramensoup153
bean, lentil, chickpeabeans133
tomatotomato131
coffee, espresso, baristacoffee130
dumpling, potsticker, gyozadumpling233
vegan, plant-basedvegan234
pizza, pasta, focaccia, ciabatta, bread, loafpizza(pizza)または food のみ(bread)235
mushroomfood のみ(該当するサブタグなし)—
honeyhoney156

小文字に変換した description フィールドと uploader フィールドを照合します。

サブタグが一致しない場合でも、すべての食品コンテンツの基本タグとして food を適用します。

食品の可能性あり/description が空 — YAML の description が空または null で、アップローダーのユーザー名から食品コンテンツであることが強く示される場合(例:eatinghealthytoday、thesourdoughnerd、katrina.the.earthy.vegan、myhealthydish)は、food と noyamldesc を適用します。

手がかりなし — description が空で、アップローダーから食品である手がかりが得られない場合(例:description のない stealth_health_life、一般的なライフスタイルアカウント)は、noyamldesc のみを適用します。

食品以外 — 完全にスキップします。タグは適用しないでください。例:フィットネス/モビリティ、ファッション、政治、医療、ユーモア、ライフスタイル。

特別なタグ:noyamldesc

noyamldesc(id=242、pid=0)は、YAML に有用な説明がなく、分類できないファイルを示します。

ユーザー名から食品コンテンツが示唆される場合は food と併せて適用し、コンテンツの手がかりがまったくない場合は単独で適用します。

必ず ai-tagged と併せて適用してください。

タグ ID クイックリファレンス

タグidpid
food1090
sourdough113109
salsa115109
indian114109
paneer123109
peppers151109
soup153109
tomato131109
beans133109
coffee1300
honey156109
dumpling233109
vegan234109
pizza235109
ai-tagged1920
noyamldesc2420

タグの適用

INSERT OR IGNORE を使用します。ImageTags テーブルでは (imageid, tagid) に UNIQUE 制約があります。

適切なアルバムルートに限定して、ファイル名から画像 ID を検索します。

SELECT i.id FROM Images i
JOIN Albums al ON al.id = i.album
JOIN AlbumRoots ar ON ar.id = al.albumRoot
WHERE ar.label = 'grouchygiraffe' AND i.name = 'DZY_GI9tCs5.mp4';

または、サブクエリを使って単一のトランザクション内で名前ごとにまとめて処理できます。

BEGIN;
INSERT OR IGNORE INTO ImageTags (imageid, tagid)
SELECT i.id, 192 FROM Images i
JOIN Albums al ON al.id = i.album
JOIN AlbumRoots ar ON ar.id = al.albumRoot
WHERE ar.label IN ('grouchygiraffe', 'shamblingshark')
AND i.name IN ('DZY_GI9tCs5.mp4', ...);
COMMIT;

ar.label で挿入範囲を限定すると、他のコレクションにある同じファイル名の項目に誤ってタグを付けるのを防げます。

ワークフロー

  1. データベースをバックアップします。
  2. タグも日付もない項目を検索するクエリを実行し、ファイル数を報告します。
  3. 各ファイルの YAML を読み、food、probably-food、no-signal、non-food に分類します。
  4. タグを適用する前に、調査結果をユーザーに提示します。ショートコード、コンテンツの概要、提案するタグを示します。
  5. 確認後、1 つのトランザクションでタグを適用します。
  6. SELECT t.name, COUNT(*) FROM ImageTags it JOIN Tags t ON t.id = it.tagid JOIN Images i ON i.id = it.imageid WHERE i.name IN (...) GROUP BY t.name を確認し、件数を検証します。
  7. Obsidian vault 内の moonlitlynx progress.md を実行概要で更新します。
  8. 進捗ノートをコミットします。

進捗ノート

進捗は /Users/mtm/Documents/Obsidian Vault/moonlitlynx progress.md で追跡します。

各実行後、## Food/recipe batch tag run の下に、日付を付けたセクションを追加して、次の内容を記録します。

  • 検出およびタグ付けしたファイル数
  • 新しく作成したタグ(該当する場合)
  • 適用したサブタグの内訳
  • スキップしたファイルとその理由

コメント