Skip to content

Apple: Add AuthorshipAPI for recording how a prim was created - #4188

Open
dgovil wants to merge 1 commit into
PixarAnimationStudios:devfrom
dgovil:authorship
Open

Apple: Add AuthorshipAPI for recording how a prim was created#4188
dgovil wants to merge 1 commit into
PixarAnimationStudios:devfrom
dgovil:authorship

Conversation

@dgovil

@dgovil dgovil commented Aug 19, 2026

Copy link
Copy Markdown
Collaborator

Description of Change(s)

This PR adds support the UsdMediaAuthorshipAPI, a multiple-apply schema that is meant to meet the needs of regulatory requirements around the world regarding Generative AI use, but also to be more generally useful for human authors as well.

The goal of this implementation is ease of adoption for regulatory compliance , and to meet the granular needs of complex OpenUSD authored scenes and workflows in a dynamic nature.

This is not a substitution for C2PA or other provenance standards, but is an implementation that is designed to work with OpenUSD's composition setup. In the future, other developers may opt to make C2PA implementations in USD, and we have talked to the C2PA leads to align this implementation such that it could gracefully and progressively flow into their future implementations.

The schema is multiple apply so that a single prim can be considered as having been authored by multiple algorithms or humans.

In addition to the schema, we also provide:

  • UsdMediaAuthorshipAPI::GetAll() which finds instances of the schema on a given prim
  • UsdMediaAuthorshipAPI::GetAllOnStage() which finds instances of the schema across the stage, and optionally across all prim specs.
  • usdauthors, a command listing records grouped by the prims they apply to
  • extras/usd/examples/usdApplyAuthorship, applying records from the command line, including converting name=value inputs into the index-matched inputNames and inputValues arrays
  • tests for the schema and the command, and toolset documentation

Link to proposal

A thorough proposal is available at the following link with further information and thinking.
Authorship API Proposal

Fixes Issue(s)

Checklist

Adds UsdMediaAuthorshipAPI, a multiple-apply schema recording who or what
authored a prim: the producer tool and its version, an IPTC digital source
type, generation inputs, attribution, copyright owner and usage terms. Each
applied instance is one record describing one authoring step, so a prim can
carry several without them clobbering each other.

Implements the schema proposed in OpenUSD-proposals PR PixarAnimationStudios#106.

Four collection methods, each taking a searchPrimStack flag that defaults off:

- GetAllOnStage(stage) collects records across a stage, reaching into
  prototypes so records inside native instances are found once.
- ComputeAccumulatedRecords(prim) returns the records that apply to a prim:
  its own plus those it accumulates from its ancestors, sorted so ancestors
  come first. This is the proposal's convention that a prim's children
  accumulate the authorship above them without erasing it, so a hand-modelled
  prim under an AI-authored group carries both records. Nothing is merged, and
  comparing a record's prim against the queried prim distinguishes inherited
  from own.
- GetAllUnder(prim) returns the records on a prim and everything beneath it.
- GetAllInLayer(layer) returns record paths authored in a single layer,
  composing nothing, so it answers what one layer contributes. Because it does
  not compose it also reaches specs no stage reports, including those inside
  variants that are not selected. Paths are returned rather than schema objects
  because such a record may have no composed prim to attach one to.

With searchPrimStack, records are gathered from every contributing SdfPrimSpec
rather than the composed prim, which finds three things the composed prim
cannot report:

- an application shadowed by an explicit apiSchemas list in a stronger layer
- properties authored without the schema ever having been applied
- the same instance name authored in several layers, where composition keeps
  only the strongest opinion for each field

Nothing is deduplicated in that mode, so a record authored in three layers is
returned three times in strongest-to-weakest order; resolving opinions is
composition's job, not this method's.

Also adds:

- usdauthors, a command listing records grouped by the prims they apply to,
  with --deep for the prim stack search, --layer to report only what a single
  layer authors, --unloaded, and --summary for a tally of producers (per
  version) and digital source types
- extras/usd/examples/usdApplyAuthorship, applying records from the command
  line, including converting name=value inputs into the index-matched
  inputNames and inputValues arrays
- tests for the schema and the command, and toolset documentation
@sunyab

sunyab commented Aug 20, 2026

Copy link
Copy Markdown
Member

Filed as internal issue #USD-12569

(This is an automated message. See here for more information.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants