Rights-safe content production
A deterministic media build proves less than you think
Matching bytes support a narrow build claim. Release readiness needs separate evidence for inputs, rights, exact-candidate review, destination state, and remote observation.
A video factory can render the same bytes twice and still leave the most important publication questions unanswered. Determinism can support a narrow, valuable claim: under a stated environment and input set, a build procedure produced a repeatable artifact. It does not by itself establish that every input was authorized, that the narration is accurate, that the final frame is safe to publish, that a platform served the same artifact, or that a viewer could use it.
This note develops a practical evidence contract for deterministic media builds. It is about local release discipline, not legal advice, platform certification, or a report about a real audience. The worked example is synthetic.
The narrow claim
The Reproducible Builds project defines a reproducible build as one in which given the same source code, build environment, and build instructions, any party can recreate bit-by-bit identical copies of specified artifacts. That definition is useful because it names inputs and environment rather than treating matching outputs as magic.
For a media bundle, the corresponding claim might be:
Given candidate specification
S, declared source setI, rendererR, toolchain environmentE, and build procedureP, two clean executions produced an MP4 with the same cryptographic digest.
That sentence is deliberately narrower than “the video is verified.” It identifies the candidate and procedure, states what was compared, and avoids implying anything about rights, truth, remote publication, or audience response.
A matching digest is strong evidence that the compared byte sequences are identical. It does not explain why they are identical, prove that the inputs were complete, or bind a remote platform’s transcode to the local master. A digest should therefore appear inside an evidence record, not as a replacement for one.
Reproducible is not hermetic, and provenance is not reproducibility
These terms answer different questions:
- Reproducibility asks whether independently prepared executions can produce the required matching result from a stated source, environment, and procedure.
- Hermeticity asks whether the build is isolated from undeclared inputs. A build that reads the network, local clock, ambient fonts, or a shared cache may happen to repeat without being hermetic.
- Provenance records a claim about how named outputs were produced: the builder, invocation, dependencies, run details, and subjects. A complete record can still describe a non-reproducible run; a malformed or untrusted record proves little.
- Review asks whether the exact candidate is accurate, rights-cleared for the intended use, private-data-safe, accessible enough for the destination, and fit for release.
Hermetic inputs can make reproducibility easier to obtain, but they do not guarantee it: nondeterministic iteration, concurrency, or an unpinned tool can still change bytes. Reproducible outputs also do not prove hermeticity: two runs can consult the same undeclared mutable service and receive the same response. Keep the claims separate and record the evidence for each.
Five layers that should not be collapsed
1. Declared inputs
Inventory every release-relevant input before building:
- script and timed captions;
- render specification and scene data;
- raster, vector, font, sound, and music assets;
- narration source or synthesis settings;
- renderer and helper scripts;
- encoder configuration;
- tool versions and platform details that can affect output;
- destination metadata such as title, description, and disclosure text.
The inventory needs stable identities, preferably content digests for files and immutable identifiers for tools. A directory name such as final-assets is not an identity. Neither is a source URL. An omitted font, generated intermediate, environment variable, locale, clock value, or random seed can make a build appear repeatable only inside one undeclared state.
2. Build execution
Capture what actually ran, not only what was intended to run:
- clean-workspace or contamination check;
- invocation and configuration identity;
- start and completion times;
- process exit status;
- warnings and stderr boundaries;
- identities of emitted artifacts;
- whether network access or mutable external state was allowed;
- whether the second run began from independently reconstructed inputs.
Running the same command twice in the same dirty directory is weaker than rebuilding from two clean workspaces. Both runs may reuse the same stale intermediate. “Twice” is not the important property; independence is.
3. Byte reproducibility
Compare every release-critical output, not only the MP4:
- final media master;
- captions;
- exact script;
- platform metadata;
- rights and provenance manifest;
- checksum list;
- contact sheet or review proxy, if it participates in approval.
A deterministic MP4 paired with drifting captions or a changed description is not a reproducible publication bundle. Conversely, different MP4 bytes do not automatically mean different visible content: timestamps, container ordering, metadata, encoder versions, or muxer behavior may differ. The result should state whether the requirement is byte identity, bounded structural equivalence, or reviewed presentation equivalence. Do not silently substitute one for another.
FFmpeg documents a bitexact format flag that limits output to platform-, build-, and time-independent data, and it separately documents controls such as -map_metadata and -metadata. Those options can help constrain known sources of variation, but enabling one flag is not evidence that the complete build is reproducible. The full invocation, input identity, tool version, container behavior, and comparison result still matter.
4. Candidate review
The byte-identical artifact still needs content review. At minimum:
- decode the exact candidate named by the digest;
- sample the beginning, transitions, densest frames, and ending;
- review the complete audio path and captions;
- check legibility at the intended display size;
- look for black frames, freezes, clipped speech, unsafe peaks, caption drift, and accidental private material;
- compare visible disclosure and claims against the approved script;
- record the reviewer, method, candidate identity, result, and limitations.
A contact sheet is useful evidence for sampled visual states. It cannot prove audio quality, every frame, motion continuity, caption timing, or the absence of a short defect between samples. Automated probes and human review answer different questions and should remain separate records.
5. Release and remote observation
A local master is not a public post. After an authorized active session submits a candidate, platform acceptance, processing, visibility, transcoding, and public retrieval remain separate states. Remote verification needs to identify:
- the authorized destination;
- submission receipt or upload identity;
- processing and rights-check state;
- selected visibility;
- resulting URL;
- fresh retrieval without privileged session state when public visibility is intended;
- rendered video, audio, captions, title, description, and disclosure;
- any platform-produced variants actually sampled;
- the observation time and scope.
A platform may transcode the media, so its served bytes may correctly differ from the local master. The release record should bind the upload to the local candidate before submission, then evaluate the served presentation and metadata under a declared comparison method. It should not demand impossible byte identity from a documented transcode or treat “processing complete” as proof of publication.
What determinism can support
With a complete record, determinism can support claims such as:
- Stable candidate generation. The same declared build inputs and environment yielded the same named outputs.
- Change detection. A digest mismatch shows that at least one compared byte changed and should reopen review.
- Review binding. The artifact reviewed can be tied to the artifact approved for the next release step.
- Regression diagnosis. Controlled rebuilds can help isolate whether drift entered through inputs, environment, tools, or procedure.
- Handoff precision. An active-session operator can receive one exact candidate instead of an ambiguous “latest” file.
- Provenance support. A build statement can describe subjects, materials, builder identity, and invocation in a machine-readable way.
SLSA’s build-provenance model is useful for the last point. Its predicate separates build outputs (subject) from known build inputs (resolvedDependencies), identifies the build definition and builder, and provides run details. Its purpose includes letting consumers verify a build against their own expectations; the statement does not supply those expectations. A signed or well-formed provenance statement is evidence about a build event, not universal approval of the artifact.
What determinism cannot establish alone
A repeatable build does not, on its own, prove:
- rights: that every asset, voice, font, or reference may be used at the intended destination;
- authorship: that a claimed creator actually created or controlled each input;
- truth: that narration, captions, examples, or metadata are accurate;
- privacy: that no personal, confidential, or sensitive information appears;
- safety: that motion, flashing, audio, or advice is suitable for every viewer;
- accessibility: that captions are accurate, visuals are legible, and the delivered player is operable;
- quality: that the video is useful, engaging, coherent, or free of defects;
- independence: that two runs did not reuse the same contaminated intermediate;
- publication: that a destination accepted, processed, listed, and served the intended content;
- reach or outcome: that anyone watched, understood, subscribed, inquired, or bought;
- future stability: that mutable tools, inputs, or destination transformations will remain unchanged.
These are not weaknesses in deterministic builds. They are different claims with different evidence.
Synthetic worked example: two matching videos, one blocked release
Assume a local factory prepares a 24-second vertical explainer. Two clean invocations report the same digest for the MP4. The caption and script files also match. The renderer version, encoder invocation, source-asset digests, and narration settings are recorded.
The release still remains blocked because the manifest lists an icon as “downloaded from source page” without a license, author, grant, or intended-use record. The build is reproducible. The rights basis is not established.
The uncertain icon is then replaced with a hand-authored vector shape. That creates a new input set and therefore a new candidate. The factory rebuilds twice, records matching new digests, and repeats exact-candidate visual and audio review. The result can now be described as a locally validated candidate with documented original replacement. It still is not a published video.
During an authorized private-upload review, the destination generates its own transcode. The upload receipt and processing state are preserved. A reviewer checks the private rendition, captions, title, disclosure, and rights-check surface. Only after an explicit visibility decision and fresh public retrieval could the record support a narrow statement that the named destination served the reviewed post at the observed time.
The example demonstrates four separate transitions:
- repeatable local build;
- rights evidence completed for the revised source set;
- exact revised candidate reviewed locally;
- destination-specific release observed remotely.
Passing one transition does not backfill another.
The evidence ledger should make invalidation visible instead of overwriting the old state:
| State | Candidate | Evidence | Decision | What invalidates it |
|---|---|---|---|---|
| A | media-017-a | Two independently prepared builds; matching MP4, script, and caption digests | Reproducibility claim passes within the recorded environment | Input, toolchain, procedure, comparison rule, or output changes |
| B | media-017-a | Manifest says only “downloaded from source page” for one icon | Release blocked; rights basis uncertain | Nothing can promote this candidate without adequate rights evidence |
| C | media-017-b | Original replacement shape and new input-set identity | New candidate; A’s digest and review do not transfer | Any further source or rights-record change |
| D | media-017-b | Two clean rebuilds match; exact digest receives visual, audio, caption, disclosure, privacy, and claim review | Locally validated for authorized private submission | Bundle mutation or mismatch between reviewed and submitted files |
| E | media-017-b plus upload receipt | Destination processing and private rendition sampled | Private-upload review recorded; still not public | Reprocessing, replacement, metadata change, failed rights check, or visibility change |
| F | Named served post | Fresh unprivileged retrieval checks URL, visibility, presentation, metadata, captions, and disclosure | Narrow publication observation at one time | Withdrawal, visibility change, served-content change, or later failed retrieval |
Candidate A remains a valid record of a repeatable but blocked build. Candidate B does not erase it; it starts a new evidence chain. Likewise, a private rendition may be useful release evidence without becoming publication evidence.
A minimal deterministic media-build record
For each candidate, preserve:
| Field | Required evidence |
|---|---|
| Candidate ID | Stable release identifier, not latest |
| Input set | Paths or logical names plus content identities |
| Rights record | Per-component basis, conditions, and review state |
| Builder | Tool or service identity and version |
| Environment | Relevant OS, architecture, locale, fonts, and dependencies |
| Invocation | Exact build command or immutable procedure identity |
| Isolation | Clean-workspace method and network/mutable-state policy |
| Run A | Time, exit state, warnings, and output digests |
| Run B | Independent setup, time, exit state, warnings, and output digests |
| Comparison | Byte-identical, structurally equivalent, presentation-equivalent, or failed |
| Review | Exact candidate, visual/audio/caption methods, result, and limits |
| Bundle | Media, script, captions, metadata, manifest, and checksum identities |
| Release state | Local draft, validated candidate, queued item, private upload, or public post |
| Remote observation | Destination, URL, visibility, served checks, time, and scope |
Failure-shaped tests
A credible workflow should deliberately test that it fails when:
- a build input changes without the candidate identity changing;
- the second run reuses an undeclared intermediate;
- an environment-dependent timestamp enters the container;
- the renderer or encoder version changes;
- the MP4 matches but captions or metadata drift;
- a source asset lacks a rights record;
- a checksum list is generated before the final file mutation;
- the reviewed file differs from the queued file;
- the contact sheet passes while audio is absent or clipped;
- a platform receipt exists but processing is incomplete;
- a private upload is mislabeled as public;
- a platform transcode differs in bytes but is never presentation-reviewed;
- a public URL requires privileged session state;
- remote metadata omits the required AI-assistant disclosure;
- a local deterministic result is used to claim views, engagement, or publication.
Decision tree: choose the next gate from the failed claim
Start with one frozen candidate ID and its declared input set. Then take the first matching branch below. A later pass never repairs an earlier failed branch; it creates evidence for a new decision.
Did the independently prepared builds produce the required comparison result?
- No, the bytes differ. Stop before candidate approval. Preserve both outputs, logs, tool versions, environments, and comparison scope. First determine whether the difference is expected container or metadata variation, a changed input, a changed toolchain, undeclared mutable state, or contamination between runs. If the release contract requires byte identity, any mismatch fails that candidate. If the contract allows structural or presentation equivalence, define that rule before evaluating the difference; do not weaken the rule after seeing the result.
- Yes. Record exactly which artifacts matched and under which standard. Continue to input completeness. Matching MP4 bytes do not imply that captions, metadata, or the rights record also matched.
Was every release-relevant input declared and identified?
- No. Treat the build statement as incomplete, even when two output digests match. Add the missing font, generated intermediate, narration setting, environment value, network response, clock, seed, or other dependency to the inventory. Freeze a new input-set identity and rebuild independently. Do not attach the old comparison result to the revised set.
- Yes. Continue to rights review. Input completeness is an inventory claim, not permission to use the inputs.
Does each component have an adequate rights basis for the intended use and destination?
- No or uncertain. Block release. Replace the component, obtain and record an adequate grant in an authorized process, or remove it. A source page, successful download, lack of a watermark, or matching digest is not a rights record. Any replacement creates a new candidate and reopens build comparison and exact-candidate review.
- Yes. Record the basis, conditions, and reviewer scope for each component, then continue to candidate review. This branch records a workflow decision, not legal certification.
Did exact-candidate visual, audio, caption, disclosure, privacy, and claim review pass?
- No. Keep the candidate local and record the defect against its digest. Correcting the script, mix, timing, frame, caption, metadata, or disclosure changes the publication bundle, so assign or freeze the revised candidate identity, rebuild as required, and repeat the affected reviews. A passing contact sheet cannot overrule failed audio or timing review.
- Yes. Mark only the reviewed candidate as locally validated for the next authorized gate. Do not call it uploaded or public.
After authorized submission, does the served rendition diverge from the local candidate?
- The bytes differ because the destination transcoded it. Do not fail solely on byte inequality. Bind the upload receipt to the local candidate, identify the served variant, and compare presentation under a predeclared method: content sequence, frame geometry, legibility, audio, caption timing, metadata, disclosure, and any destination-specific changes. Preserve the limits of sampling.
- The served presentation or metadata differs materially, or the cause is unknown. Stop promotion, preserve the remote observation, and choose an authorized correction, replacement, visibility change, or withdrawal path. Never silently redefine the local candidate as the served result.
- The scoped served review passes. Record destination, URL, visibility, variant, observation time, retrieval conditions, checks, and limitations. Only a fresh public retrieval supports a scoped publication claim; it still says nothing about reach, comprehension, or outcome.
This ordering is intentionally conservative: comparison, completeness, rights, candidate review, authorized submission, and remote observation are separate decisions. The useful result of a failed branch is a precise next gate, not a more confident label.
Compact checklist
Before calling a media build reproducible and ready for the next gate:
- freeze one candidate ID and complete input inventory;
- record rights evidence independently from build evidence;
- pin the renderer, encoder, fonts, and relevant environment;
- remove or declare clocks, randomness, network inputs, and mutable state;
- build from two independently prepared clean workspaces;
- preserve commands, logs, exit states, warnings, and tool versions;
- compare every release-critical bundle artifact;
- state the comparison standard explicitly;
- regenerate checksum records only after the candidate is frozen;
- decode and review the exact named candidate;
- inspect visual, audio, caption, disclosure, and privacy boundaries;
- record what sampling and automated probes cannot prove;
- hand off one immutable candidate to the authorized release step;
- keep local validation, queueing, private upload, and publication distinct;
- after release, verify the served result and visibility under a declared scope.
Evidence horizons
Keep at least six evidence horizons separate:
- input horizon: what source set and environment were identified;
- execution horizon: what build processes actually ran;
- comparison horizon: which outputs matched under which standard;
- review horizon: what exact candidate content was examined;
- release horizon: what an authorized destination accepted and processed;
- observation horizon: what a fresh viewer path served at a named time.
If evidence conflicts, preserve the conflict. A matching local digest should not override a failed rights review; an upload receipt should not override a private visibility setting; a public URL should not override a wrong served title or missing disclosure.
Source notes
- Reproducible Builds, Definitions: project documentation defining reproducible builds in terms of the same source, environment, instructions, and bit-for-bit identical artifacts. Use it for the narrow reproducibility boundary, not as certification of this workflow.
- Supply-chain Levels for Software Artifacts, Build Provenance v1.2: primary specification for describing build subjects, resolved dependencies, build definition, builder identity, and run details. Use it as a provenance model; it does not establish media rights, factual accuracy, accessibility, or publication.
- FFmpeg, FFmpeg Formats Documentation: first-party tool documentation for the
bitexactformat flag and metadata controls. Use it to identify relevant encoder and muxer controls, not to claim that one option makes a complete workflow reproducible.
Verification scope
The source review for this field note checked the Reproducible Builds definition, the SLSA v1.2 build-provenance model, and FFmpeg’s current formats documentation. The FFmpeg claim here is intentionally limited to the documented bitexact format flag and the existence of metadata controls; it does not claim that those controls alone make a workflow reproducible. The worked ledger is synthetic, and no build, publication, audience, or outcome is claimed.