foley.provenance#
Provenance layer for foley — attribution/credits (and, later, disclosure).
This subpackage keeps published output legal and traceable. Its first half (#9a)
is foley.provenance.credits — the stdlib-only TASL attribution / credits
generator (CREDITS.md + JSON manifest) that reads the LicenseRecord SSOT.
Its second half (#9b) is foley.provenance.disclosure — AudioSeal
watermarking, the portable C2PA content-credential sidecar, the EU AI Act Art. 50
checklist, and the trademarked-audio / recognizable-voice safety scan. It is
intentionally NOT imported here so import foley stays dependency-light: its
module top level is stdlib-only, but audioseal / torch / torchaudio
(the foley[provenance] extra) are imported lazily inside its watermark
functions. Import it explicitly (from foley.provenance import disclosure) or
reach the pure helpers via foley.art50_checklist / foley.scan_prompt.
Functions
|
Render one sound's TASL attribution line. |
|
Build a |
|
Build the deduplicated |
|
The machine-readable manifest for |
|
Render |
Classes
|
One rendered TASL credit for a single sound (a flat, serializable row). |
|
A deduplicated, ordered collection of |
- class foley.provenance.CreditEntry(sound_id, title=None, author=None, author_url=None, source=None, source_url=None, license_id='unknown', license_name=None, license_url=None, modified=False, requires_attribution=False, attribution_text=None, notice_text_required=None, is_ai_generated=False, generator_model=None, disclosure_recommended=False, watermark=None, c2pa_manifest_ref=None)[source]#
Bases:
SerializableMixinOne rendered TASL credit for a single sound (a flat, serializable row).
Built by
credit_entry()from a record’s rights fields; rendered to a single attribution line byattribution_line(). Carries the AI-disclosurewatermark / C2PA fields as pass-throughs so the JSON manifest becomes the content-credentials carrier once #6/#9b populate them (
Nonetoday).
- class foley.provenance.Credits(entries=(), title='Credits', schema_version=1)[source]#
Bases:
SerializableMixinA deduplicated, ordered collection of
CreditEntryfor one run.Iterable and sized; renders to
CREDITS.mdviamarkdownand to a JSON manifest viamanifest(==to_dict()). Both are deterministic (no timestamps) and diffable.
- foley.provenance.attribution_line(source, *, fmt='markdown')[source]#
Render one sound’s TASL attribution line.
A source-supplied
attribution_text(if non-empty) is returned verbatim; otherwise the line is synthesized from Title/Author/Source/License, with a(modified)notice and an AI-disclosure segment appended as applicable.- Parameters:
source (
Union[CreditEntry,SoundRecord,Candidate,LicenseRecord]) – ACreditEntry, or any credit input (coerced first).fmt (
str) –'markdown'(hyperlinked list-item body) or'plain'(text with URLs in parentheses).
- Return type:
- Returns:
The attribution line (no leading bullet / trailing newline).
- foley.provenance.credit_entry(record, *, title=None)[source]#
Build a
CreditEntryfrom a record (title override optional).Every field is read straight off the
LicenseRecord(flags never re-derived);modifiedreflects a non-emptytransformationslist.- Parameters:
record (
Union[SoundRecord,Candidate,LicenseRecord]) – ASoundRecord,Candidate, orLicenseRecord.title (
Optional[str]) – Explicit title override (else resolved from caption/tags/…).
- Return type:
- foley.provenance.credits_for(sounds, *, title='Credits', only_required=False, sort='appearance')[source]#
Build the deduplicated
Creditsfor the sounds used in a run.- Parameters:
sounds (
Iterable[Union[SoundRecord,Candidate,LicenseRecord]]) – An iterable of records / candidates / license records.title (
str) – The credits heading (also carried in the manifest).only_required (
bool) – Keep only entries whose license requires attribution (drops CC0 / user-owned courtesy credits). DefaultFalsecredits everything (never-discard-provenance).sort (
str) –'appearance'(default: first-seen order),'author', or'title'(case-insensitive alpha).
- Return type:
- Returns:
A
Credits; identical sounds (same id) are credited once (first-writer-wins).
- foley.provenance.credits_manifest(credits)[source]#
The machine-readable manifest for
credits— a JSON-native dict.entriesis a plainlistof per-credit dicts (not thetuplethatdataclasses.asdictwould preserve), so the manifest equalsjson.loads(credits.to_json())— the exact shape written tocredits.json. It carries the full field set, including therequires_attributionmark and thewatermark/c2pa_manifest_refpass-throughs (Noneuntil #9b).- Return type:
- foley.provenance.render_credits_md(credits, *, title=None, heading_level=2)[source]#
Render
creditsas a deterministicCREDITS.mddocument.- Parameters:
- Return type:
- Returns:
The Markdown document (bulleted attribution lines; a placeholder note when empty), ending in a single trailing newline.
Modules
TASL attribution / credits generator — the provenance render layer (#9a). |
|
Disclosure, watermarking & safety for AI-generated audio (#9b). |