Digital Source Type
The IPTC
DigitalSourceType
field declares how an image came to exist — camera capture, scan,
composite, AI-generated, etc. Values come from
the IPTC controlled vocabulary.
Metawatch reads DST from two places: the IPTC XMP block embedded in the
image file, and the c2pa.actions assertions inside any C2PA
manifest. Both are reported separately on this page.
By bucket (IPTC XMP)
How the population of DST-declaring images sorts into Metawatch's
editable bucket scheme (see
config/dst_vocab.yaml in the repo). "Other" means the
raw URI was a valid IPTC newscode we haven't mapped yet; "Not declared"
is excluded from this table (it dominates).
| Bucket | Images | Share of DST-declaring |
|---|---|---|
| Other | 1 | 100.00% |
By bucket (C2PA actions)
Same bucketing applied to digitalSourceType values found
inside C2PA c2pa.actions / c2pa.actions.v2
assertions. Counts every action's DST, so an image with a chain of
edits contributes more than one row.
| Bucket | Occurrences |
|---|---|
| AI-generated | 6 |
| Edited with Generative AI | 5 |
| Other | 1 |
Raw IPTC newscode values
The exact URIs we saw — useful for spotting buckets we haven't mapped yet.
| Term | Bucket | Images | URI |
|---|---|---|---|
nil | Other | 1 | nil |
Raw C2PA values
| Term | Bucket | Occurrences | URI |
|---|---|---|---|
trainedAlgorithmicMedia | AI-generated | 6 | http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia |
compositeWithTrainedAlgorithmicMedia | Edited with Generative AI | 5 | http://cv.iptc.org/newscodes/digitalsourcetype/compositeWithTrainedAlgorithmicMedia |
empty | Other | 1 | http://c2pa.org/digitalsourcetype/empty |
The bucket → label mapping is in
config/dst_vocab.yaml and is applied at export time, not at
crawl time. The raw URIs are stored in images.parquet, so
editing the YAML and re-running export_for_site.py rebuckets
every historical run without re-crawling.