DEV Community

Cover image for AI Video Software to Optimize Your Campaigns: How I Test Twelve Creatives Without Twelve Tools
Luckyzhou
Luckyzhou

Posted on

AI Video Software to Optimize Your Campaigns: How I Test Twelve Creatives Without Twelve Tools

Last quarter I hit the wall every paid campaign hits: the creative that worked stopped working, and I had no fast way to make the next one. I searched for "ai video software to optimize your campaigns" and got feature lists full of promises, but almost nothing about the loop that actually matters: make variants, test them, learn, repeat.

So I built the loop myself. This post covers what that software really has to do, a variant plan you can generate in a minute, where I make the videos, and a script that tells you which change actually moved the numbers.

What AI video software to optimize your campaigns really has to do

Software doesn't optimize a campaign. Testing does. What software can do is remove the two bottlenecks that stop you from testing enough:

  • Making variants. Every new hook, visual, and format is another video.
  • Reading results cleanly. If nobody can tell which change mattered, more variants just means more noise.

That applies to almost every use case I see: an AI product video generator for a small store, a social creator testing openers, a game studio testing scenes. The bottleneck is throughput, and throughput dies from handoffs, messy naming, and blind spend.

Plan the variants before you generate anything

My first campaign test was chaos. I changed the hook, the visual, and the format at the same time, named files final_v2_new, and couldn't say afterward what had worked.

Now I plan the grid first. Three hooks, two visuals, and two formats give twelve variants, each with a stable ID:

# variants.py - build a variant plan: hooks x visuals x formats
import csv
from itertools import product

hooks   = ["problem", "benefit", "social_proof"]   # placeholder angles
visuals = ["product_closeup", "lifestyle"]         # placeholder scenes
formats = ["9x16", "1x1"]                          # placeholder aspect ratios

with open("variants.csv", "w", newline="") as f:
    w = csv.writer(f)
    w.writerow(["variant_id", "hook", "visual", "format", "filename"])
    for i, (h, v, fmt) in enumerate(product(hooks, visuals, formats), 1):
        vid = f"v{i:02d}"
        w.writerow([vid, h, v, fmt, f"{vid}_{h}_{v}_{fmt}.mp4"])
print("wrote variants.csv")
Enter fullscreen mode Exit fullscreen mode

Use the variant_id as the ad name or a tracking parameter. Then every result maps back to a row, and you can read each variable on its own.

A few rules that kept the grid honest:

  • Make hooks differ in angle, not wording. "Problem," "benefit," and "social proof" are three angles. Three rephrasings of the same angle are one test.
  • Hold everything else constant. Same clip length, same call to action, same audio across variants.
  • Write the plan before you open any tool. It's much harder to stay disciplined once the first clip looks good.

A variant grid of hooks, visuals, and formats feeding into one workspace and one results table

Where I make the variants: AI video software in one workspace

For the making part, I used VOKOO, a multi-model AI creation platform built around video. Its tagline is "Create more. Switch less," which is exactly what a twelve-variant plan needs. I dropped in one product image, typed a short motion prompt, and had a clip to review before I finished my coffee.

To be clear about scope: it's the creation side of the loop. It doesn't run your ads or measure them. Here's what I actually used.

Prompt to clip, in one place

The AI video generator turns a prompt, or a prompt plus an image, into a video. Make a video before the idea gets cold. Each hook in my grid became a prompt.

Generate the visual, then move it

The AI image generator builds the scene, and the platform carries it into motion. That's the image to video AI loop for the "lifestyle" and "product_closeup" rows, and it's how you animate a photo of a real product without extra tools.

Switch models, not tabs

The AI agent lets me try different models without rebuilding my workflow. Same prompt, different model, then compare the looks. Sometimes the look itself is the variable.

Choose the spec, see the cost

I can pick quality and generation specs per stage and see the estimated credit cost before I submit. For twelve variants, that matters: I draft cheap, then render only the finalists at full quality. One place to generate, edit, enhance, and animate.

Derive the other formats

Once you have a good master in 16:9, two ffmpeg commands give you the other formats from the plan. Keep the subject centered in the master, because these are center crops:

ffmpeg -i master.mp4 -vf "crop=trunc(ih*9/16/2)*2:ih" -c:a copy v01_9x16.mp4
ffmpeg -i master.mp4 -vf "crop=ih:ih" -c:a copy v01_1x1.mp4
Enter fullscreen mode Exit fullscreen mode

Read the results by dimension

Export per-variant results from your ad platform as results.csv with variant_id, impressions, clicks, and spend. Column names vary by platform, so adjust them. This script groups the numbers by one variable at a time:

# read_results.py - CTR and cost per click, grouped by one variable at a time
import csv
from collections import defaultdict

variants = {r["variant_id"]: r for r in csv.DictReader(open("variants.csv"))}
totals = defaultdict(lambda: defaultdict(lambda: [0, 0, 0.0]))  # dim -> value -> [impr, clicks, spend]

for r in csv.DictReader(open("results.csv")):
    v = variants[r["variant_id"]]
    for dim in ("hook", "visual", "format"):
        t = totals[dim][v[dim]]
        t[0] += int(r["impressions"]); t[1] += int(r["clicks"]); t[2] += float(r["spend"])

for dim, values in totals.items():
    print(dim)
    for val, (impr, clicks, spend) in sorted(values.items()):
        ctr = clicks / impr if impr else 0
        cpc = spend / clicks if clicks else 0
        print(f"  {val:16} impressions={impr:6} ctr={ctr:.2%} cpc={cpc:.2f}")
Enter fullscreen mode Exit fullscreen mode

One warning: small samples lie. Don't call a winner on a handful of clicks. Let each variant collect enough impressions first.

Keeping the cost of testing down

Testing twelve variants only works if each one is cheap to make. Keep the plan file as the source of truth, draft everything at a lower spec, and only re-render the variants that earn it.

If you'd like an LLM to draft hook lines for the hooks list, RouteAI provides a cost-effective, OpenAI-compatible API gateway with multiple models, so setup stays simple.

Try this next

AI video software to optimize your campaigns isn't magic. It's a way to make the next variant faster than your budget runs out. VOKOO covered the making part for me. Stop managing tools. Start making things.

Here's a first test you can run this week:

  1. Run variants.py with your own hooks and visuals.
  2. Make the first four variants and derive the other formats.
  3. Tag each ad with its variant_id and let the data collect.
  4. Run read_results.py, and check the estimated cost before you scale up.

If you want an easy AI video generator that keeps simple AI video creation simple and still leaves room to explore, try VOKOO at https://vokoo.ai.

Top comments (0)