# AdBatch — approved footage, controlled variations

This package contains an actual15-second original animation and12 rendered MP4 variants. The product, brand and source footage are explicitly synthetic. They do not demonstrate a real organizer's capacity, durability, fit or sales performance.

## Review first

Open `delivery/review.html`. The matrix is3 English hooks ×2 CTAs ×2 aspect ratios:12 files, but only6 copy combinations. Body copy and the underlying source sequence remain the same. All videos are silent, with approved English text burned in and matching SRT/VTT files. MP4 outputs are720×1280(9:16) and1080×1080(1:1),24fps,15 seconds.

## Reproduce

Requirements: an existing Python3.11+ environment with Pillow, a local TrueType font and an existing FFmpeg executable supporting H.264/PNG/MP4. The executable and font are **not bundled**. No paid API or account is required. The package does not download or install dependencies automatically.

```sh
python adbatch.py --ffmpeg PATH_TO_YOUR_FFMPEG --config approved-claims.json --output delivery --make-synthetic-source
python -m unittest -v test_adbatch
```

To rerender from the included source MP4, omit `--make-synthetic-source`. On systems without a discoverable Arial/DejaVu font, add `--font PATH_TO_YOUR_LICENSED_TTF`. Use your own approved dependency distribution. See FFmpeg's licence guidance: https://ffmpeg.org/legal.html . Redistributing an FFmpeg binary would create separate obligations; this package does not do that.

The command uses subprocess argument lists, not shell-built text. It generates a local raw-footage animation only in synthetic_demo mode, assembles approved source segments, preserves their aspect ratio with padding, overlays the approved copy and removes every audio track. Then it fully decodes each output and checks actual MP4 dimensions, duration and audio-track count. The manifest records source, configuration and output hashes.

## Real customer production is supported

Copy `customer-input-template.json` to a private job folder and complete it with actual authorized information. Set mode=customer_production. Set rights_confirmed, script_approved and product_claims_approved to true **only after the customer has actually supplied those approvals**, including an approver, source licence reference and script version. These record declarations; the software does not certify their legal validity.

Supply1–20 MP4/JPG entries in `sources`. Each has a local path, type, start_seconds, duration_seconds and rights_reference. Selected segments must total the final10–30-second video. MP4 source footage in the input list must total no more than10 minutes; a JPG is held for its selected duration. The engine concatenates segments in the supplied order and keeps this sequence the same across the12 exports. Input files can have real filenames and product content; they do not need a DEMO name.

Provide exactly3 hooks,2 body lines,2 CTAs and the approved_text list. The script rejects any text outside that list. It never invents a product claim or rewrites text itself. Use descriptive, substantiated copy. Price/promotion/availability categories require a timezone-specific approval expiry, and expired claims block rendering. Font, language, audio and more complex editing remain separately scoped.

Run with the completed customer configuration and omit `--make-synthetic-source`. Customer mode does not add a synthetic label to actual footage. It also does not remove any watermark already present in supplied media. No real customer footage, authorization or approval is included in this demonstration.

## Input and delivery boundary

One brand, one storage product, no person avatars, at most10 minutes of organized source video,3 approved openings,2 approved CTAs,2 formats, each≤30 seconds. Two rounds of changes inside the agreed source/copy scope can be quoted; new concepts, new filming, product photography, languages or external music require a separate decision. The first-launch product strips audio, including source audio, rather than making assumptions about music rights.

Deliver MP4s, variable manifest, approved script version, subtitle files and a review page. The customer approves the final pieces and handles placement and advertising spend. Technical validation does not certify a platform's acceptance, creative quality, claim substantiation, return on ad spend or customer satisfaction.

## Current evidence and missing evidence

The package has a real rendered synthetic sample, not a plan to render later. `delivery/QA.json` and the regression record state what was tested. A separate customer-mode smoke test uses only original test assets to exercise MP4/JPG input; it is not a real client case.

External English copy review and real product footage review have not been purchased or performed. Additional cash spent is$0; production time has value and is not treated as zero economic cost. No platform upload, outreach, advertising-account access, music purchase or payment collection is configured.

Approved text is never silently shortened: caption words/lines and the brand label are measured with the actual font; an over-wide unspaced word or brand blocks that render. The product name is bounded metadata, not an extra on-screen claim. Correct the approved configuration with its approver before rerunning.
