mcpField
P
photo-metadata

photo-metadata

github.com/jamditisクリエイティブ・メディア43873 回インストール4 日前に更新
リポジトリ

photo-metadata について

photo-metadataは、写真ファイルに編集情報、アクセシビリティ、権利、画像の来歴に関するメタデータを埋め込み、確認するスキルです。ExifToolの手順や慎重なキャプション作成、GPS削除、C2PA処理の制約を扱います。

主な機能

  1. 01EXIF、IPTC、XMPメタデータの書き込み
  2. 02キャプションと代替テキストの個別作成
  3. 03AI生成・編集画像のラベル付け
  4. 04公開用コピーからのGPS削除
  5. 05署名せずにC2PAマニフェストを読み取り
  6. 06書き込み後のメタデータ検証

活用シーン

  1. 01報道機関向け写真の準備
  2. 02撮影者のクレジットと再利用ライセンスの追加
  3. 03AIによる画像生成・編集の開示
  4. 04共有前の機微な位置情報の削除

インストール

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

$npx skills add https://github.com/jamditis/claude-skills-journalism --skill photo-metadata

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

embed.py
reference.md
test_embed.py
agents/
openai.yaml

詳細

写真のメタデータ

概要

画像ファイルに埋め込まれたメタデータは、ファイルとともに移動します。写真 CMS(Photo Mechanic、Lightroom、Capture One)や通信社の受信システムは、写真のキャプション、クレジット、権利情報を、別の文書や受信時のメールではなく、IPTC および XMP ブロックから読み取ります。キャプション、クレジット、代替テキスト、ライセンスがファイルの中に含まれていない場合、写真をダウンロード、転送、または再アップロードした時点で失われます。

exiftool を 1 回実行すると、EXIF、IPTC、XMP の各レイヤーにまとめて書き込み、ほかのすべてのタグ(カメラ設定、撮影時刻)は変更せずに残せます。最新のソフトウェアは まず XMP、次に旧式の IPTC-IIM、日付と GPS についてのみ EXIF を読み取るため、どの形式にも XMP を書き込み、JPEG/TIFF には互換性を確保するため IIM のコピーも追加してください(HEIC、AVIF、WebP には IIM 用の領域がありません。reference.md を参照してください)。

このワークフローが「キャプション、クレジット、著作権」だった頃から、2 つの点が変わりました。1 つ目は、画像の制作方法もメタデータに含める必要があることです。IPTC の Digital Source Type フィールドは、カメラで撮影した写真と AI 生成画像を区別し、プラットフォーム(Meta、Google)や EU AI Act でも、この情報がますます参照されています。2 つ目は、**暗号化された来歴情報(C2PA/「Content Credentials」)**が、通信社の画像やカメラに導入されつつあることです。これは署名付きのレイヤーで、exiftool では読み取れますが、書き込めません。どちらについても以下で説明します。

**優れたモデルなら、フィールド名はすでに把握しています。**難しいのは手順ではなく、以下に示す判断です。そこを最初に説明してください。

使用する場面

  • 提携する報道機関が検索、クレジットの付与、再掲載を行えるよう、通信社向けの報道写真を準備する
  • 公開または共有の前に、必須の撮影者クレジットと再利用ライセンスを追加する
  • 画像の制作方法を明示する。通常の写真、AI 生成のイラスト、AI 編集による合成画像など
  • 撮影した画像(画像フォルダー)に一括でタグを付ける
  • 埋め込み代替テキストで画像のアクセシビリティを高め、著作権または Creative Commons で権利を明確にする
  • 代理店から届いた画像の C2PA Content Credentials を読み取り、内容を確認する

**使用しない場面:**ピクセルの編集(これはメタデータのみです)、HTML の <img> に代替テキストを記述する場合(accessibility-compliance を使用)、証拠として Web ページを保存する場合(web-archiving を使用)、Content Credential に署名する場合(exiftool ではできません。以下の c2patool を使用してください)。

規律(エージェントが間違えること)

有能なエージェントであっても、次のような失敗をします。これらはタグ名よりも重要です。

  1. 見えるものだけをキャプションに記載してください。 フレームに何が写っているかを説明し、聞かされた情報は書かないでください。目に見えない出来事、意図、身元、関係性、法的地位を推測してはいけません。「デモ参加者が裁判所の判決に抗議して集まっている」は、フレーム内にない事実についての主張です。「群衆が裁判所の外でプラカードを掲げている」が写真の説明です。
  2. 見て確認できる証拠に基づいて人物を説明してください。 機関名や役割を書くのは、表示された記章、ラベル付きのベスト、制服、バッジ、ワッペンで確認できる場合だけにしてください。そうでなければ、「戦術装備を身に着けた警官たち」「青いシャツを着た男性」と書いてください。フレーム内で明白でない限り、人物の移民資格や法的地位を断定してはいけません(「拘束者」「非正規滞在者」など)。
  3. 代替テキストは必ず記載してください。キャプションとは別のものです。 XMP-iptcCore:AltTextAccessibility にスクリーンリーダー向けの短い説明を、IPTC:Caption-Abstract に公開用のキャプションを、それぞれ記載してください。IPTC では意図的にこれらを区別しています。キャプションは事実を述べてページ上に表示されます。代替テキストはスクリーンリーダーで読み上げられるため、一方をもう一方にそのままコピーしないでください。エージェントはよくキャプションだけを書き、代替テキストを省略します。
  4. 画像の作成方法を明記し、決して偽らないでください。 画像が AI 生成または AI 編集されたものなら、XMP-iptcExt:DigitalSourceType にその旨を記載してください。通常の写真なら、digitalCapture がその事実を明示します。正直にラベルを付けてください。さらに、注意深く対応し、受け取ったファイルに既存の Digital Source Type や C2PA クレデンシャルがある場合は、決して削除しないでください。それは意図的に行われた開示を消すことになります。
  5. 位置情報によって誰かが危険にさらされる可能性がある場合は、GPS 情報を削除してください。 デモ参加者、情報提供者、虐待の被害者、未成年者の場合、埋め込まれた座標から自宅や避難場所が判明するおそれがあります。キャプションとクレジットは残したまま、公開用の派生ファイルから GPS 情報を削除してください(-gps:all=)。GPS 情報を保持したアーカイブ用マスターは、位置情報が編集上の証拠となる場合に限り保管してください。GPS はファイル内で最もリスクの高いタグです。
  6. 構造化フィールドは中立に保ってください。 編集上の見解や議論のある呼称は Headline に記載し、City、Caption-Abstract、位置情報フィールドには記載しないでください。提携する報道機関はそれぞれ独自の表現を使います。構造化フィールドを中立に保てば、各社が対応しやすくなります。
  7. ソースからの往復処理を検証してください。 バッファーからではなく、書き込んだファイルからメタデータを読み戻してください。アップロードや転送の後は、送信元ではなく転送先から再度読み取ってください。200 の応答はバイト列が受け付けられたことを示すだけで、メタデータが保持されたことを証明するものではありません。ほとんどのソーシャルプラットフォームはアップロード時に再エンコードし、IPTC、XMP、GPS、および C2PA を削除します(reference.md を参照)。したがって、「埋め込んだ」は「届いた」という意味ではありません。

クイックリファレンス:重要な項目

役割IPTC (IIM)XMPEXIF
撮影者By-linedc:CreatorArtist
クレジットCredit(組織名、最大32文字)photoshop:Credit(正式名称/組織名)-
キャプションCaption-Abstractdc:DescriptionImageDescription
代替テキスト(短文)-iptcCore:AltTextAccessibility-
拡張説明-iptcCore:ExtDescrAccessibility(複雑な画像用。キャプションではありません)-
作成方法-iptcExt:DigitalSourceType(CV の完全な URI)-
キーワードKeywords(複数指定可能)dc:Subject-
著作権CopyrightNoticedc:RightsCopyright
ライセンス(CC)-xmpRights:Marked/WebStatement/UsageTerms、cc:License(旧形式)-
ライセンス/発見性-xmpRights:WebStatement、plus:LicensorName/plus:LicensorURL(Google)-
見出しHeadlinephotoshop:Headline-
場所Sub-location/City/Province-State/Country-*iptcCore:Location、photoshop:City/State/Country-
日付DateCreatedphotoshop:DateCreatedDateTimeOriginal(正確な値)

デジタルソースタイプの値(完全に AI 生成 → trainedAlgorithmicMedia、AI 編集 → compositeWithTrainedAlgorithmicMedia、通常の写真 → digitalCapture)、IPTC 管理語彙の全項目、IPTC-IIM のバイト数制限、PLUS/Google のライセンス項目と Creative Commons の項目セット、C2PA ツール、AP キャプションの作成手順については、reference.md を参照してください。

3つのレイヤーすべてに一括で書き込む

CAPTION="A crowd holds signs outside the Mercer County Courthouse, Friday, June 19, 2026, in Trenton, N.J. (Dana Rivera/Example News Collective)"
ALT="A crowd of people holding handmade signs stands on the steps of a stone courthouse."
# how the image was made, a full IPTC CV URI (see reference.md for all values)
DST="http://cv.iptc.org/newscodes/digitalsourcetype/digitalCapture"

exiftool -codedcharacterset=utf8 -overwrite_original -P \
  -EXIF:Artist="Dana Rivera" -XMP-dc:Creator="Dana Rivera" -IPTC:By-line="Dana Rivera" \
  -IPTC:Credit="Example News Collective" -XMP-photoshop:Credit="Dana Rivera / Example News Collective" \
  -IPTC:Caption-Abstract="$CAPTION" -XMP-dc:Description="$CAPTION" -EXIF:ImageDescription="$CAPTION" \
  -XMP-iptcCore:AltTextAccessibility="$ALT" \
  -XMP-iptcExt:DigitalSourceType="$DST" \
  -IPTC:Keywords="protest" -IPTC:Keywords+="Trenton" \
    -XMP-dc:Subject="protest" -XMP-dc:Subject+="Trenton" \
  -EXIF:Copyright="(c) 2026 Example News Collective. Licensed CC BY 4.0." \
    -IPTC:CopyrightNotice="(c) 2026 Example News Collective. CC BY 4.0." \
    -XMP-dc:Rights="(c) 2026 Example News Collective. Licensed CC BY 4.0." \
  -XMP-xmpRights:Marked=True \
    -XMP-xmpRights:WebStatement="https://creativecommons.org/licenses/by/4.0/" \
    -XMP-xmpRights:UsageTerms="Licensed CC BY 4.0. Credit: Dana Rivera / Example News Collective." \
    -XMP-cc:License="https://creativecommons.org/licenses/by/4.0/" \
    -XMP-cc:AttributionName="Dana Rivera / Example News Collective" \
  -IPTC:City="Trenton" -IPTC:Province-State="New Jersey" \
    -IPTC:Country-PrimaryLocationName="United States" -IPTC:Country-PrimaryLocationCode="USA" \
  "-IPTC:DateCreated<EXIF:DateTimeOriginal" "-IPTC:TimeCreated<EXIF:DateTimeOriginal" \
    "-XMP-photoshop:DateCreated<EXIF:DateTimeOriginal" \
  photo.jpg

-P はファイルの更新日時を保持します。書き込み時にタイムスタンプも更新したい場合は、これを省略してください。複雑な画像(グラフ、インフォグラフィック)の拡張アクセシビリティ説明は、キャプションとは別のフィールドである XMP-iptcCore:ExtDescrAccessibility に記述します。代替テキストと周囲のテキストだけでは画像の内容を伝えられない場合に限り、追加してください。

次に、ファイルから検証します(エージェントが省略しがちな手順です)。

exiftool -G1 -s -IPTC:By-line -IPTC:Caption-Abstract -XMP-iptcCore:AltTextAccessibility \
  -XMP-iptcExt:DigitalSourceType -XMP-cc:License -IPTC:Keywords photo.jpg

画像の作成方法をラベル付けする(AI と合成画像)

XMP-iptcExt:DigitalSourceType は、IPTC 管理語彙に基づいて画像の由来を記録します。この値は完全な URIです。exiftool は値を検証しないため、単語だけや誤字でも警告なく受け入れられ、役に立ちません。すべての報道機関で必要となる3つの値は次のとおりです。

BASE="http://cv.iptc.org/newscodes/digitalsourcetype"
# a straight camera photo, worth stating even for real news images
exiftool -XMP-iptcExt:DigitalSourceType="$BASE/digitalCapture" photo.jpg
# fully AI-generated (a trained model produced the whole image)
exiftool -XMP-iptcExt:DigitalSourceType="$BASE/trainedAlgorithmicMedia" ai.jpg
# a real photo edited with generative AI (inpaint / outpaint / generative fill)
exiftool -XMP-iptcExt:DigitalSourceType="$BASE/compositeWithTrainedAlgorithmicMedia" edited.jpg

Meta と Google はこのフィールドを読み取り、AI コンテンツを自動でラベル付けします。また、EU AI 法の機械可読な開示義務(第50条、2026年8月から施行)により、これは「あれば望ましい」ものから「必須」に近づきつつあります。IPTC 2025.1 では、関連フィールドとして AISystemUsed、AISystemVersionUsed、AIPromptInformation、AIPromptWriterName が追加されています(exiftool ≥ 13.40)。語彙の全項目と、使用を避けるべき廃止用語については、reference.md を参照してください。

コンテンツクレデンシャル(C2PA):exiftool で読み取れるが署名はできないもの

コンテンツクレデンシャルとは、画像のピクセル、作成者、使用ツール、AI が関与したかどうかに結び付けられた、暗号署名付きの C2PA マニフェストです。カメラ(Leica M11-P、Nikon Z6III、Sony Alpha)や報道機関(AFP、AP、BBC の試験導入)で採用が進んでいます。IPTC/XMP とは別のレイヤーであり、「ファイルには何と記載されているか」ではなく、「誰が署名したのか、署名後に変更されていないか」という別の問いに答えます。

exiftool で読み取ることはできますが、書き込みや検証はできません。

exiftool -G1 -a -jumbf:all incoming.jpg     # report the C2PA/JUMBF manifest (no signature check)

ここに表示されるのはマニフェストのデータであり、署名や署名者を検証するものではありません。実際に確認するには、ファイルを verify.contentauthenticity.org にドロップし、署名者が想定している報道機関であることを確かめてください。クレデンシャルを作成するには、exiftool ではなく、Adobe/CAI のツール、c2patool(brew install c2patool)、または pip install c2pa-python を使用してください。

署名済みファイルへのメタデータ書き込みは、そのクレデンシャルを壊します。 C2PA のハードバインディングではアセットをハッシュ化し、そのハッシュには埋め込まれたメタデータも含まれるため、exiftool による書き込み、キャプションやクレジットの追加、GPS の削除、さらにはこのスキルでのタグ付けでさえ、マニフェスト自体は残りますが無効になります。「クレデンシャルを決して削除しない」ことは必要ですが、それだけでは十分ではありません。受け取った署名済みファイルについては、元のファイルには手を加えず、c2patool で再署名する派生ファイルに対してメタデータ処理を行うか、埋め込まれたクレデンシャルが検証できなくなったことを受け入れ、その旨を明示してください。元の署名済みファイルにメタデータを埋め込み、クレデンシャルが引き続き有効であるかのように扱わないでください。

報道機関に伝えておくべき注意点が、さらに 2 つあります。有効なクレデンシャルが証明するのは署名とそのチェーンであり、撮影された場面が実際のものだということではありません(カメラは画面を撮影した写真にも問題なく署名します)。また、ほとんどのソーシャルプラットフォームはアップロード時にマニフェストを削除するため、プラットフォーム上での来歴は、「永続的な」透かしやフィンガープリントによる復元でしか保持されないことがよくあります。reference.md を参照してください。

公開用の派生ファイルから GPS を削除する

キャプション、クレジット、著作権、ソースタイプには触れず、位置情報を削除します。

exiftool -gps:all= "-xmp:GPS*=" -overwrite_original photo.jpg
exiftool -a -G1 -gps:all "-xmp:GPS*" photo.jpg   # verify, this must print nothing

主要な 3 つの座標だけでなく、ワイルドカードの -xmp:GPS*= を使用してください。目的地や撮影方向のフィールド(GPSDestLatitude、GPSImgDirection)も位置情報に当たり、そうしないと残ってしまいます。座標が編集上の証拠となる場合(ジオロケーション、検証)は、完全な GPS 情報を含むファイルをロックしたアーカイブ用マスターとして保管してください。公開するのは、位置情報を削除したコピーです。embed.py --strip-gps を使うと、タグ付け後にフォルダー全体のコピーから GPS 情報を削除できます。

検索結果(Google Images)に表示されるライセンス情報

Google Images の「ライセンス可」バッジと機能する「この画像を取得」リンクを表示するには、権利に関するウェブステートメント(トリガー)と PLUS ライセンサーのフィールドを設定します。

exiftool -XMP-xmpRights:Marked=True \
  -XMP-xmpRights:WebStatement="https://example.org/license/photo123" \
  -XMP-plus:LicensorName="Example News" -XMP-plus:LicensorURL="https://example.org/buy/photo123" \
  photo.jpg

ウェブステートメントは dc:Rights ではなく xmpRights:WebStatement です。これはよくある、しかもコストのかかる取り違えです。Creative Commons ライセンスも、CC の証書 URL を使い、同じ WebStatement フィールドを経由します。詳細と PLUS フィールド一式については、reference.md を参照してください。

フォルダーの一括タグ付け

撮影した画像には、ファイルごとにコマンドを実行するのではなく、マニフェストから exiftool を実行してください。このディレクトリの embed.py は、フォルダーと JSON マニフェスト(共通のクレジット、ライセンス、ライセンサー、Digital Source Type のフィールドに加え、画像ごとの代替テキスト、キャプション、詳細な説明、キーワード、任意の画像ごとのソースタイプの上書き)を受け取り、タグ付けしたコピーを書き込みます。各コピーを読み戻してメタデータが反映されたことを確認し、--strip-gps を指定した場合はコピーから GPS 情報も削除します。Digital Source Type は省略形(digitalCapture)または完全な URI を指定できます。それ以外の値は、壊れた値が埋め込まれるのを防ぐため拒否されます。python3 embed.py --help を実行してください。

よくある間違い(ベースラインテストより)

間違い修正方法
キャプションは書いたが、代替テキストがないAltTextAccessibility も必ず記入してください。これらは別のフィールドです
キャプションを代替テキスト(または ExtDescrAccessibility)にコピーしたIPTC ではこれらを区別しています。スクリーンリーダー向けの文章を実際に書き、ExtDescr は複雑な画像にのみ使用してください
By-line/Credit/City が気付かないうちに切り詰められたこれらの IIM フィールドは 32 文字が上限です。クレジット全文は XMP-photoshop:Credit に記入してください
キャプションに、フレーム内にない内容を書いた見えているものだけを説明してください。見えない背景情報は別の場所に記載してください
AI 生成画像にラベルを付けなかったDigitalSourceType に trainedAlgorithmicMedia(または適切な複合値)を設定してください
DigitalSourceType に単語だけを設定した値には http://cv.iptc.org/... の完全な URI が必要です。exiftool はこれを検証しません
受け取ったファイルの Digital Source Type または C2PA を削除した開示情報を消さないでください。受け取ったファイルの来歴を保持してください
GPS 情報が埋め込まれたまま公開した被写体や情報源を危険にさらす可能性がある場合は、-gps:all= で削除してください
WebStatement を dc:Rights に設定したGoogle/ライセンスの Web ステートメントは xmpRights:WebStatement です
編集上のラベルを City またはキャプションに記載したフレーミングは Headline に記載し、構造化フィールドは中立に保ってください
アップロード後もメタデータが保持されていると思い込んだアップロード先から再読み込みしてください。ほとんどのソーシャルプラットフォームは IPTC/XMP/GPS/C2PA を削除します
キーワードをカンマ区切りの文字列 1 つにした繰り返し可能な Keywords レコード(および dc:Subject のリスト)を記入してください
CC ライセンスの注記をプレーンテキストだけで設定したxmpRights:WebStatement(CC deed URL)と xmpRights:Marked を追加してください

実社会への影響

埋め込みメタデータがあれば、提携先の報道機関は写真を見つけ、正しくクレジットを記載し、写真家に連絡することなく明確なライセンスのもとで再公開できます。また現在では、画像が人間とモデルのどちらによって作られたかを示し、署名付きの Content Credential を伝える役割も担っています。これを削除すると、同じ写真がクレジットもライセンスも来歴もない、出所不明のファイルになってしまいます。

コメント