Skip to content
Agentmart
Submit a tool

provenance

Stamp AI-provenance metadata into media and documents you build yourself when they leave the platform by a path it does not stamp for you, such as an upload…

Skill by vibetasking

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/vibetasking-provenance

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Stamp AI-provenance metadata into media and documents you build yourself when they leave the platform by a path it does not stamp for you, such as an upload to a third-party service or a published page

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/provenance

What's inside

Skill name
provenance
Description
Stamp AI-provenance metadata into media and documents you build yourself when they leave the platform by a path it does not stamp for you, such as an upload to a third-party service or a published page
License
MIT
Instructions
96 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# AI provenance marking

EU law requires machine-readable marking on AI-generated content. The platform stamps what it delivers for you: files produced by its generation tools (image, video, music, and speech generation) carry it from the start, and reply attachments, channel sends and email attachments are stamped on the way out when the format allows it (PDF, Office documents, PNG, JPEG, WebP, MP4, MOV, MP3, WAV, FLAC, Opus). Images, video and audio other than Opus also carry signed Content Credentials, which any later edit of the file breaks, so upload a generated file as it came out when you can. Anything you build yourself that leaves by another path (an upload to a third-party service, a published page, a video you compose) must be stamped before it goes. Files that stay inside the platform need nothing.

The declaration is always the same two values: the IPTC digital source type `http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia` and the credit `AI-generated`. Stamp after the file is final, since re-encoding or regenerating a file can strip metadata.

## Video and audio (mp4, mov, mp3, wav)

Write the tags in place with mutagen, the library the platform marks its own output with. It touches no frame or sample, and an ffmpeg remux would keep only the comment in MP4, MOV and WAV.

```bash
python - <<'EOF'
import os
from mutagen.id3 import TXXX
from mutagen.mp3 import MP3
from mutagen.mp4 import MP4, MP4FreeForm
from mutagen.wave import WAVE
path = "out.mp4"
source_type = "http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia"
ext = os.path.splitext(path)[1].lower()
if ext in (".mp4", ".mov"):
    media = MP4(path)
    if media.tags is None:
        media.add_tags()
    media.tags["----:org.iptc.newscodes:DigitalSourceType"] = [MP4FreeForm(source_type.encode())]
    media.tags["\xa9cmt"] = ["AI-generated"]
else:
    media = MP3(path) if ext == ".mp3" else WAVE(path)
    if media.tags is None:
        media.add_tags()
    media.tags.add(TXXX(encoding=3, desc="DigitalSourceType", text=[source_type]))
media.save()
EOF
```

## PDF

```bash
python - <<'EOF'
from pypdf import PdfWriter
path = "report.pdf"
w = PdfWriter(clone_from=path)
w.add_metadata({
    "/Subject": "AI-generated",
    "/DigitalSourceType": "http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia",
})
with open(path, "wb") as f:
    w.write(f)
EOF
```

## Office documents (docx, xlsx, pptx)

Standard library only:

```bash
python - <<'EOF'
import re, shutil, zipfile
path = "report.docx"
tmp = path + ".marked"
credit = "AI-generated http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia"
with zipfile.ZipFile(path) as src, zipfile.ZipFile(tmp, "w", zipfile.ZIP_DEFLATED) as dst:
    for item in src.namelist():
        data = src.read(item)
        if item == "docProps/core.xml":
            text = data.decode("utf-8")
            text, found = re.subn(
                r"<dc:description(\s[^>]*)?/>|<dc:description(\s[^>]*)?>(.*?)</dc:description>",
                lambda m: "<dc:description" + (m.group(1) or m.group(2) or "").rstrip() + ">"
                + ((m.group(3) or "") + " " + credit).strip() + "</dc:description>",
                text,
                count=1,
                flags=re.S,
            )
            if not found:
                text = text.replace(
                    "</cp:coreProperties>",
                    '<dc:description xmlns:dc="http://purl.org/dc/elements/1.1/">' + credit + "</dc:description></cp:coreProperties>",
                )
            data = text.encode("utf-8")
        dst.writestr(item, data)
shutil.move(tmp, path)
EOF
```

## Images (png, jpg)

Images from the platform's image generation are already marked. For an image you composed yourself (png, jpg, webp), write the XMP fields in place with exiftool, which leaves the pixels, the frames and the author's own metadata untouched:

```bash
exiftool -overwrite_original \
  -XMP-iptcExt:DigitalSourceType="http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia" \
  -XMP-photoshop:Credit="AI-generated" chart.png
```

From vibetasking/vibetasking-plugin, MIT.

More from vibetasking/vibetasking-plugin

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Oct 1, 2026 (27 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from vibetasking

Cite this page

provenance skill. Agent Mart. https://agentmart.dev/skills/vibetasking-provenance (last updated 2026-10-24)