Sora vs Veo: A Reproducible Comparison Protocol
A dated test protocol for matching briefs, preserving failed attempts, scoring outputs, and measuring actual costs. Results pending.
There is no measured winner in this article. We have not published matched Sora and Veo runs, outputs, invoices, or blinded ratings. Earlier claims that one model wins on realism and the other on motion were not supported by a reproducible test and have been removed.
Scope and date
This comparison protocol was prepared on 22 September 2026. It is a proposed test, not completed research. The historical Sora 2 / Veo 3 URL is retained so existing links continue to work. Model availability and versions change: resolve the exact provider model IDs on the day you run the experiment instead of assuming the historical names describe the current catalog.
Use OpenAI’s video generation documentation and Google’s video generation documentation to confirm available controls and restrictions. Provider feature descriptions are not independent comparative quality measurements.
Availability in the inspected AdAnt catalog
On 22 September 2026, an authenticated AdAnt CLI catalog query returned nine video entries. It included veo-3.1, backed by provider gemini and model veo-3.1-generate-preview, and no Sora entry. The sanitized catalog record preserves the returned model and provider identifiers.
This observation applies only to the inspected AdAnt account and catalog. It does not establish whether Sora is available through other products or providers. A matched Sora/Veo test cannot be executed through that inspected AdAnt interface as returned; substituting another model would answer a different question. No generation requests were submitted and no generation credits were spent on this check. The protocol below remains unexecuted.
Three identical briefs
Use licensed or original reference assets and publish them with the test. Start with these text-only briefs, applied unchanged to each eligible model:
- Product fidelity: A locked camera shows a plain blue ceramic mug on a white table. A hand lifts the mug, pauses, and sets it down. Soft window light, no logos or text.
- Motion: A red wooden toy car rolls left to right across a desk and stops beside a stack of three books. One continuous side-on shot, no cuts.
- Speech and sound: An adult presenter in a quiet room says, “Here is the first version. Let’s improve it together.” Static medium shot, natural voice, no music.
Choose a shared supported duration, resolution, and aspect ratio before running. If a model cannot support the same audio or reference mode, mark that comparison ineligible; do not silently change its prompt or settings.
Run protocol
Generate three attempts per brief per model, including unsuccessful attempts. This small sample is exploratory and cannot establish a universal winner. Fix the attempt budget in advance. Save the complete request and response, exact model ID, provider, region if relevant, UTC timestamp, job ID, elapsed time, error or moderation status, and output file checksum. Seeds should be recorded when available; equal seeds across providers do not imply equivalent samples.
Do not select only the strongest clip. Publish all outputs you have permission to share, including failures. Keep any edited demonstration separate from raw generation results. A rerun or prompt revision starts a separately labeled round.
Score before revealing the model
Have two reviewers independently score randomized clips from 1 to 5 for brief adherence, temporal coherence, product identity, and visible artifacts. For eligible audio clips, score intelligibility and synchronization separately. Define 1 as unusable, 3 as requiring substantial editing, and 5 as usable for the stated brief; retain disagreements and individual scores. Report the number of usable clips and explain exclusions.
Measure the cost of a usable result
Record actual billed generation amounts and currency, including charged failures and retries, from the provider receipt. Separate generation from editing, audio, human review time, subscription fees, taxes, and AdAnt credits. Cost per usable clip equals the total billed generation cost divided by clips meeting the predeclared acceptance criterion. If no clip qualifies, report zero usable clips and total spend; do not divide by zero.
Results register
| Evidence | Current status |
|---|---|
| Exact model IDs and run timestamps | Not run |
| Shared settings and source assets | To be fixed before execution |
| Raw outputs and failed attempts | Not collected |
| Blinded ratings and reviewer agreement | Not collected |
| Actual bills and cost per usable clip | Not measured |
| Comparative recommendation | Withheld pending results |
Choose based on your own brief and a measured retry budget. Open AdAnt to plan a production test; confirm the models and estimated credits available in your account before generating. This article does not promise that every provider model or setting is available in AdAnt.
Product guidance maintained by AdAnt. Platform documentation, first-party observations, and untested recommendations are labeled separately. Contact AdAnt for corrections.



