DEV Community

Neuhaus Barsuhn
Neuhaus Barsuhn

Posted on Fully Autonomous

Building a Review Manifest for AI-Assisted Short-Video Exports

Building a Review Manifest for AI-Assisted Short-Video Exports

A video editor can look correct while the exported file is wrong. A font may be substituted, captions can drift after a frame-rate conversion, a final scene can be missing, or an audio normalization step can change the balance between narration and music. When an AI-assisted workflow also involves generated scripts, visuals, and voices, it becomes even more important to identify exactly what was reviewed.

This article describes a small, tool-neutral review manifest that binds a human approval to one exact export. The goal is not to prove that a video is accurate. The goal is to make the review reproducible and prevent a later file from silently inheriting an earlier approval.

The problem with a simple “approved” flag

Suppose an editor stores this state:

{
  "project": "launch-video",
  "approved": true
}
Enter fullscreen mode Exit fullscreen mode

The record does not answer several practical questions:

  • Which file was approved?
  • Which version of the script and captions was used?
  • Were all media-rights records complete?
  • Was the mobile layout inspected?
  • Who reviewed factual claims?
  • Was the file changed after approval?

A useful manifest should connect those decisions without storing credentials or sensitive browser data.

A minimal manifest schema

Start with a deliberately small structure:

{
  "manifest_version": "1.0",
  "project_id": "faceless-demo-042",
  "export": {
    "filename": "faceless-demo-042-v7.mp4",
    "sha256": "...",
    "bytes": 18429302,
    "duration_ms": 42880,
    "width": 1080,
    "height": 1920,
    "frame_rate": 30,
    "audio_channels": 2
  },
  "inputs": {
    "script_version": "script-12",
    "scene_map_version": "scenes-18",
    "captions_version": "captions-09",
    "asset_log_version": "assets-22"
  },
  "checks": [],
  "approval": null
}
Enter fullscreen mode Exit fullscreen mode

The export hash is the critical field. If one byte changes, the approval no longer applies. The input versions explain which source records led to that file.

Hash the actual publication candidate

Python's standard library is enough for streaming SHA-256 calculation:

from hashlib import sha256
from pathlib import Path


def file_sha256(path: Path, chunk_size: int = 1024 * 1024) -> str:
    digest = sha256()
    with path.open("rb") as handle:
        while chunk := handle.read(chunk_size):
            digest.update(chunk)
    return digest.hexdigest()
Enter fullscreen mode Exit fullscreen mode

Hash the file after the final encoder, metadata writer, and optimization step. Hashing an intermediate render gives a false sense of integrity if the publishing pipeline later rewrites it.

Do not treat the hash as a statement about quality. It only identifies bytes. A harmful or incorrect video can have a perfectly valid hash.

Model checks as evidence, not booleans

A boolean does not explain what was observed. Use a structured result:

{
  "check_id": "captions-safe-area",
  "status": "pass",
  "method": "mobile-preview",
  "reviewer": "editor-17",
  "observed_at": "2026-09-19T14:20:00Z",
  "evidence": {
    "device_profile": "360x800",
    "scenes_reviewed": ["S001", "S002", "S003", "S004"]
  }
}
Enter fullscreen mode Exit fullscreen mode

Useful statuses are pass, fail, needs_review, and not_applicable. Avoid silently converting needs_review into a pass.

Some checks can be automated:

  • resolution and aspect ratio;
  • duration and frame rate;
  • missing or overlapping caption intervals;
  • unexpected numbers or URLs;
  • absent asset-source records;
  • long silent sections;
  • text outside a conservative safe area.

Other checks need accountable human judgment:

  • whether a claim is accurate and current;
  • whether a visual misrepresents an event;
  • whether consent covers a voice or likeness;
  • whether a disclosure is understandable;
  • whether a health, legal, financial, or safety claim needs qualified review.

Validate the manifest before approval

The validator should reject incomplete evidence rather than guessing:

REQUIRED_CHECKS = {
    "claims-reviewed",
    "captions-compared",
    "media-rights-reviewed",
    "mobile-safe-area",
    "audio-reviewed",
    "disclosures-reviewed",
}


def validate_checks(checks: list[dict]) -> list[str]:
    errors = []
    indexed = {item.get("check_id"): item for item in checks}

    missing = REQUIRED_CHECKS - indexed.keys()
    if missing:
        errors.append(f"missing checks: {sorted(missing)}")

    for check_id, item in indexed.items():
        if item.get("status") not in {
            "pass", "fail", "needs_review", "not_applicable"
        }:
            errors.append(f"{check_id}: invalid status")
        if item.get("status") == "pass" and not item.get("evidence"):
            errors.append(f"{check_id}: pass has no evidence")

    return errors
Enter fullscreen mode Exit fullscreen mode

A release gate should require all mandatory checks to be either pass or a justified not_applicable. Any fail or needs_review blocks approval.

Keep generation and approval separate

A production workspace may coordinate scripts, scenes, visuals, voiceover, captions, editing, and review. For example, Faceless Reels AI is a browser-based workflow for those stages. Regardless of the tool, the service or model that generated content should not automatically approve its own result.

Keep separate identities for:

  • the process that generated or assembled media;
  • the automated validators;
  • the person or role that approved factual claims;
  • the person or role that approved the final export.

This separation makes failures easier to diagnose and reduces the risk that “generation completed” is mistaken for “publication approved.”

Create an approval record

Only after validation should the manifest receive an approval block:

{
  "status": "approved",
  "approved_export_sha256": "...",
  "approved_at": "2026-09-19T14:32:00Z",
  "reviewer": "publisher-04",
  "policy_version": "short-video-policy-6",
  "notes": "Normal-speed mobile review completed"
}
Enter fullscreen mode Exit fullscreen mode

Before upload, calculate the hash again and compare it with approved_export_sha256:


def is_approved_file(path: Path, manifest: dict) -> bool:
    approval = manifest.get("approval") or {}
    expected = approval.get("approved_export_sha256")
    return bool(expected) and file_sha256(path) == expected
Enter fullscreen mode Exit fullscreen mode

If it differs, return the file to review. Do not update the hash automatically, because that would transfer approval to unreviewed bytes.

Record publication without changing approval

Publication is a separate event:

{
  "destination": "example-platform",
  "published_at": "2026-09-19T14:40:00Z",
  "public_url": "https://example.invalid/video/123",
  "export_sha256": "...",
  "disclosure_rendered": true
}
Enter fullscreen mode Exit fullscreen mode

The destination may transcode the upload. Preserve the submitted-file hash and, when possible, record observable properties of the public version. Do not claim the platform's transcoded bytes equal the local file unless they were actually compared.

Privacy and retention

The manifest should avoid passwords, session tokens, private prompts, browser storage, and unnecessary personal data. Reviewer identifiers can be internal pseudonymous IDs if the organization does not need names. Evidence should be proportional: a safe-area check may need scene IDs and dimensions, not a full copy of every source asset.

Define retention periods for manifests, media-rights records, correction history, and removed publications. A manifest is useful only if people can still understand its field definitions later, so version the schema and review policy.

Final checklist

Before release, verify that:

  1. the manifest refers to the exact final export;
  2. the SHA-256 hash was calculated after all transforms;
  3. script, scene map, captions, and asset log versions are recorded;
  4. mandatory checks include evidence;
  5. no failed or unresolved check is hidden;
  6. disclosures match the actual production process;
  7. the approved hash is rechecked immediately before upload;
  8. publication records identify the submitted export;
  9. correction and withdrawal paths are documented.

A review manifest does not replace careful editorial judgment. It gives that judgment a precise object, a repeatable checklist, and a durable audit trail. That small amount of structure can prevent many avoidable errors in fast AI-assisted video pipelines.

Top comments (0)