photo-metadata について
photo-metadataは、写真ファイルに編集情報、アクセシビリティ、権利、画像の来歴に関するメタデータを埋め込み、確認するスキルです。ExifToolの手順や慎重なキャプション作成、GPS削除、C2PA処理の制約を扱います。
主な機能
- 01EXIF、IPTC、XMPメタデータの書き込み
- 02キャプションと代替テキストの個別作成
- 03AI生成・編集画像のラベル付け
- 04公開用コピーからのGPS削除
- 05署名せずにC2PAマニフェストを読み取り
- 06書き込み後のメタデータ検証
活用シーン
- 01報道機関向け写真の準備
- 02撮影者のクレジットと再利用ライセンスの追加
- 03AIによる画像生成・編集の開示
- 04共有前の機微な位置情報の削除
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jamditis/ claude-skills-journalism --skill photo-metadataインストール後、Claude Code で/photo-metadataを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
embed.pyreference.mdtest_embed.pyagents/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 を使用してください)。
規律(エージェントが間違えること)
有能なエージェントであっても、次のような失敗をします。これらはタグ名よりも重要です。
- 見えるものだけをキャプションに記載してください。 フレームに何が写っているかを説明し、聞かされた情報は書かないでください。目に見えない出来事、意図、身元、関係性、法的地位を推測してはいけません。「デモ参加者が裁判所の判決に抗議して集まっている」は、フレーム内にない事実についての主張です。「群衆が裁判所の外でプラカードを掲げている」が写真の説明です。
- 見て確認できる証拠に基づいて人物を説明してください。 機関名や役割を書くのは、表示された記章、ラベル付きのベスト、制服、バッジ、ワッペンで確認できる場合だけにしてください。そうでなければ、「戦術装備を身に着けた警官たち」「青いシャツを着た男性」と書いてください。フレーム内で明白でない限り、人物の移民資格や法的地位を断定してはいけません(「拘束者」「非正規滞在者」など)。
- 代替テキストは必ず記載してください。キャプションとは別のものです。
XMP-iptcCore:AltTextAccessibilityにスクリーンリーダー向けの短い説明を、IPTC:Caption-Abstractに公開用のキャプションを、それぞれ記載してください。IPTC では意図的にこれらを区別しています。キャプションは事実を述べてページ上に表示されます。代替テキストはスクリーンリーダーで読み上げられるため、一方をもう一方にそのままコピーしないでください。エージェントはよくキャプションだけを書き、代替テキストを省略します。 - 画像の作成方法を明記し、決して偽らないでください。 画像が AI 生成または AI 編集されたものなら、
XMP-iptcExt:DigitalSourceTypeにその旨を記載してください。通常の写真なら、digitalCaptureがその事実を明示します。正直にラベルを付けてください。さらに、注意深く対応し、受け取ったファイルに既存の Digital Source Type や C2PA クレデンシャルがある場合は、決して削除しないでください。それは意図的に行われた開示を消すことになります。 - 位置情報によって誰かが危険にさらされる可能性がある場合は、GPS 情報を削除してください。 デモ参加者、情報提供者、虐待の被害者、未成年者の場合、埋め込まれた座標から自宅や避難場所が判明するおそれがあります。キャプションとクレジットは残したまま、公開用の派生ファイルから GPS 情報を削除してください(
-gps:all=)。GPS 情報を保持したアーカイブ用マスターは、位置情報が編集上の証拠となる場合に限り保管してください。GPS はファイル内で最もリスクの高いタグです。 - 構造化フィールドは中立に保ってください。 編集上の見解や議論のある呼称は
Headlineに記載し、City、Caption-Abstract、位置情報フィールドには記載しないでください。提携する報道機関はそれぞれ独自の表現を使います。構造化フィールドを中立に保てば、各社が対応しやすくなります。 - ソースからの往復処理を検証してください。 バッファーからではなく、書き込んだファイルからメタデータを読み戻してください。アップロードや転送の後は、送信元ではなく転送先から再度読み取ってください。200 の応答はバイト列が受け付けられたことを示すだけで、メタデータが保持されたことを証明するものではありません。ほとんどのソーシャルプラットフォームはアップロード時に再エンコードし、IPTC、XMP、GPS、および C2PA を削除します(
reference.mdを参照)。したがって、「埋め込んだ」は「届いた」という意味ではありません。
クイックリファレンス:重要な項目
| 役割 | IPTC (IIM) | XMP | EXIF |
|---|---|---|---|
| 撮影者 | By-line | dc:Creator | Artist |
| クレジット | Credit(組織名、最大32文字) | photoshop:Credit(正式名称/組織名) | - |
| キャプション | Caption-Abstract | dc:Description | ImageDescription |
| 代替テキスト(短文) | - | iptcCore:AltTextAccessibility | - |
| 拡張説明 | - | iptcCore:ExtDescrAccessibility(複雑な画像用。キャプションではありません) | - |
| 作成方法 | - | iptcExt:DigitalSourceType(CV の完全な URI) | - |
| キーワード | Keywords(複数指定可能) | dc:Subject | - |
| 著作権 | CopyrightNotice | dc:Rights | Copyright |
| ライセンス(CC) | - | xmpRights:Marked/WebStatement/UsageTerms、cc:License(旧形式) | - |
| ライセンス/発見性 | - | xmpRights:WebStatement、plus:LicensorName/plus:LicensorURL(Google) | - |
| 見出し | Headline | photoshop:Headline | - |
| 場所 | Sub-location/City/Province-State/Country-* | iptcCore:Location、photoshop:City/State/Country | - |
| 日付 | DateCreated | photoshop:DateCreated | DateTimeOriginal(正確な値) |
デジタルソースタイプの値(完全に 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 を伝える役割も担っています。これを削除すると、同じ写真がクレジットもライセンスも来歴もない、出所不明のファイルになってしまいます。