cd /news/ai-agents/how-my-agent-produced-a-3-9m-view-vi… · home topics ai-agents article
[ARTICLE · art-21833] src=zonted.com pub= topic=ai-agents verified=true sentiment=↑ positive

How My Agent Produced a 3.9M-View Viral Video

A fully autonomous AI pipeline produced a 10-second documentary-style video about a Tulum car rental scam that has garnered 3.9 million views, with 100% of views coming from non-followers and 986 shares. The video was generated without a camera, actor, or editor, using a queue-based system that converts a concept JSON into a Seedance prompt, WaveSpeed-generated footage, and an FFmpeg overlay before publishing to four platforms. The pipeline's stability relies on WaveSpeed's authenticated API, which avoids the reverse-engineering issues that plagued previous AI content projects.

read10 min publishedMay 31, 2026

One scam concept goes into a queue. A fully autonomous pipeline turns it into a documentary-style reel and ships it to four platforms. This one came out the other side with 3.9 million views and counting.

  • The video is the Tulum spare-tire rental scam reel —3,943,661 views, 100% from non-followers, 986 shares. No camera, no actor, no editor. - It’s one run of a skill my agent executes end to end: concept → Seedance prompt → WaveSpeed generation → FFmpeg overlay → multi-platform publish.
  • Every artifact below is the real one: the queue JSON, the exact prompt that generated the footage, the overlay code, and the publish config.
  • The account-level story — how the whole channel hit 18 million views in 90 days— is the companion piece. This is the anatomy of one video inside it.

The video #

This is a ten-second clip of a couple at a Cancun airport rental counter, a pushy agent fixated on the spare tire, and — days later — a different employee claiming the tire is gone and reaching for a card machine. It is a real scam. None of it was filmed. The footage, the people, the garage, the luggage carts: all generated.

Here is what that produced, from the account’s own insights the morning I grabbed this:

Two numbers matter more than the view count. 100% non-followers — the reel reached essentially zero existing audience; it was pure cold algorithmic reach. And 986 shares, which outnumber the 518 saves and run heavy against just 2,622 likes. People didn’t double-tap this. They sent it — to the friend flying to Mexico next month. Hold onto that; it’s the whole reason it traveled.

The pipeline, in one line #

A concept becomes a prompt becomes a clip becomes a captioned, overlaid, multi-platform reel — from a queue, with no human in the loop on the production side. Five steps, one skill my agent runs:

concept (JSON) → documentary prompt → WaveSpeed Seedance clip → FFmpeg overlay → publish to four platforms.

One thing worth saying up front, because it’s the difference between this working and not: WaveSpeed exposes a real, authenticated API. Unlike the Suno mess that killed Kapiko, nothing here is reverse-engineered or breaking every 36 hours. The key lives in the keychain, the call is a clean POST, and the whole skill actually survives as a cron job. Here is each step, with the real files.

Step 1: the concept is data, not a script #

Every reel starts as a structured queue item. Not a screenplay — a small JSON object that names the place, the setup, where each person stands, and the five beats that will become the on-screen story. This is the actual Tulum entry:

data/queue.json — the Tulum item

{
  "id": "tulum-car-rental-spare-tire-scam",
  "destination": "Tulum",
  "country": "Mexico",
  "scam_name": "Spare Tire Rental Scam",
  "location_context": "At Cancun Airport rental counters feeding Tulum
     road trips, inside bright garages and return lanes packed with carts.",
  "concept": "The pickup agent makes a big show of the spare tire, then at
     return another employee claims it is missing and charges hundreds.",
  "prompt_anchors": ["airport rental garage", "open trunk",
     "spare tire close-up", "clipboard inspection",
     "different employee at return", "credit card machine"],
  "tourist_blocking": "A couple stands at the open trunk as the pickup agent
     points hard at the spare tire and tools like it matters most.",
  "scammer_blocking": "Days later, a different employee at return bends into
     the same trunk, straightens up, and announces the spare is gone.",
  "beats": [
    "Pickup fixates on the spare tire",
    "The trunk gets extra attention",
    "Return day feels routine at first",
    "Then the tire is suddenly missing",
    "The charge hits before you can react"
  ],
  "hashtags": ["tulum", "mexico", "travelscam", "rentalcar",
     "sparetire", "travelsafety", "cancunairport", "tabiji"]
}

The concept itself isn’t invented. It’s lifted from a real, upvoted travel-scam report — the kind where a tourist got burned and came back to write it up. That’s the validated-demand trick I cover in the account-level post: you’re transcribing a scam people already proved they care about, not guessing. The beats

array is the most important field — those five lines become the lower-third captions, and they follow a deliberate threat-then-fix arc.

Step 2: concept → documentary prompt #

A script, generate_prompt.py

, flattens that JSON into one Seedance prompt. It stitches the location, the opening visual, the two blocking descriptions, the reveal, and the visual anchors into a single paragraph, then ends with a fixed clause that forces documentary realism. This is the exact prompt that generated the footage you just watched:

Generated Seedance prompt

Photorealistic documentary-style travel footage in Tulum, Mexico. At
Cancun Airport rental counters feeding Tulum road trips, inside bright
garages and return lanes packed with luggage carts. A bright rental
garage hums with rolling suitcases, cars pulling out, and staff guiding
tired arrivals into inspection lanes. A couple stands at the open trunk
as the pickup agent points hard at the spare tire and tools like it
matters more than anything else. Days later, a different employee at
return bends into the same trunk, straightens up, and announces the
spare is gone while holding a payment terminal. [...] Visual anchors to
preserve: airport rental garage, open trunk, spare tire close-up,
clipboard inspection, different employee at return, credit card machine.
Natural handheld camera movement, subtle zoom or push-in only when it
helps the social tension, realistic pacing, overlapping background
motion, authentic tourist behavior, grounded travel realism, no
stylization, no subtitles, no on-screen text.

Two rules are doing quiet work here. First, “no subtitles, no on-screen text” — the model is bad at rendering text and it instantly breaks the documentary look, so all words get added later in FFmpeg, never by the model. Second, the script runs a small substitution pass to keep a scam prompt from tripping the generator’s safety filter without losing the mechanics:

generate_prompt.py — moderation softening

replacements = {
    ' aggressive ':   ' pressuring ',
    ' aggressively ': ' insistently ',
    ' threatens ':    ' warns about ',
    ' threat ':       ' warning ',
    ' extortion ':    ' fake fine ',
}

“Pressuring” renders the same social tension as “aggressive” and sails through moderation. The scam still reads; the trigger words don’t.

Step 3: generate the clip #

The prompt goes to WaveSpeed running ByteDance’s Seedance 2.0, vertical, ten seconds. The call is unremarkable, which is the point — it’s a real API:

run_queue_item.py — submit to WaveSpeed

BASE  = 'https://api.wavespeed.ai/api/v3'
MODEL = 'bytedance/seedance-2.0/text-to-video'

payload = {
    'prompt': prompt,
    'duration': 10,
    'aspect_ratio': '9:16',
    'resolution': '480p',
}

A clip runs roughly $0.30 to $2 depending on duration and resolution. Cheap per unit, not free at volume — and it says nothing about whether the result is any good, which is still the hard part. The raw 480p vertical clip lands on disk and moves to the only step that touches a human-readable word.

Step 4: burn the overlay #

Everything you read on screen — the flag, the crimson headline, the five beats that appear one at a time — is added after generation with FFmpeg. The overlay script never assumes a canvas size; it measures the real frame with ffprobe

, then dynamically wraps and shrinks text to fit. That’s why a long scam name never runs off the edge:

render_overlay.py — measure, wrap, fit

max_headline_width = int(w * 0.78)
max_beat_width     = int(w * 0.76)

def fit_wrapped(text, font_path, start_size, max_width, max_lines, min_size):
    size = start_size
    while size >= min_size:
        lines = wrap_text(text, font((font_path, size)), max_width)
        if len(lines) <= max_lines:
            return size, lines
        size = max(min_size, math.floor(size * 0.92))  # shrink 8%, retry
    return min_size, wrap_text(text, font((font_path, min_size)), max_width)

The five beats are timed to reveal in sequence across the clip’s duration — one lower-third line at a time, each fading in, the last one held to the end in crimson for emphasis:

render_overlay.py — beat timing

beat_start = 0.9
segment = max(1.1, (duration - beat_start) / max(len(beats), 1))

The output is a finished, captioned, on-brand vertical MP4 — the exact thing in the embed above. No human has touched it.

Step 5: publish everywhere at once #

A config builder turns the same queue item into per-platform captions, then one publish script fans the video out. Here is the Instagram caption it generated — note that it’s the five beats again, plus the explainer, plus the “save this” call to action that drives the shares:

build_config.py — generated Instagram caption

The Spare Tire Rental Scam in Tulum, Mexico 🇲🇽

Pickup fixates on the spare tire
The trunk gets extra attention
Return day feels routine at first
Then the tire is suddenly missing
The charge hits before you can react

The spare tire rental scam works by making the trunk part of the
story from the beginning, so the final accusation feels pre-scripted.

Save this before your next trip. 📌

#tulum #mexico #travelscam #rentalcar #sparetire #travelsafety
#cancunairport #tabiji

One script (publish-video.py

) then does the whole fan-out: upload the file to temporary storage, create the Instagram Reel, upload the YouTube Short, post the Facebook Page reel, hand the clip to TikTok, and clean up — each with a thumbnail pulled from the 1-second mark. For this reel, Instagram, YouTube, and TikTok all shipped; Facebook got rate-limited and was left to retry rather than hammered. X stays off by default.

Why this one hit 3.9 million #

The pipeline ships a reel like this every day. Most do fine. This one detonated, and the insights say why. Look at the engagement shape again: 986 shares, 518 saves, 2,622 likes. On most content likes dwarf everything; here shares are over a third of the likes and beat the saves. That is the signature of content people forward rather than admire.

It’s engineered for exactly that. A named scam at a named place is a warning you feel obligated to pass to someone specific. The five beats deliver the threat fast and the caption delivers the fix (“save this”), which is the structure that travels — a threat with no defense just makes people anxious and they scroll on. And because Instagram weights shares heavily for reaching people who don’t follow you, 986 shares is what turned a tiny account’s reel into 1.85 million strangers reached. The account-level post breaks down those mechanics — the Reddit demand-mining, the account warming, the human kept on engagement — in full.

The takeaway #

A single structured concept went into a queue and came out as 3.9 million views, with no human touching the footage between the two. That’s the part that’s genuinely solved: the production line. What it doesn’t solve is which concept detonates and which dies at 4,000 views — that’s still taste, validated demand, and a distribution game the platforms keep changing.

The machine makes the video. The judgment about what to make, and the patience to keep feeding it, is the whole job. One in fifty hits 3.9 million. The skill’s contribution is making the other forty-nine cost a dollar each.

Newsletter

Get the next post by email. #

One email when I publish something new. No spam, no fixed schedule, unsubscribe anytime.

Recommended Reading

The Three Unlocks Behind 18M Views of AI Travel ContentTabiji, our AI travel-safety channel, got 18,117,121 views in 90 days — 98.6% from strangers. The three unlocks: Reddit as a demand oracle, warming accounts…

The True Cost of AI Content ProductionEveryone obsesses over model costs and token prices. But after producing 400+ pages and 200+ videos with AI, we learned the real expense is data…

Kapiko: a 10-day, $150 post-mortemBuilt and shipped Kapiko — an AI-generated ambient music YouTube channel — in 10 days for ~$150. The pipeline worked. The Suno API does not exist. Here is…

── more in #ai-agents 4 stories · sorted by recency
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/how-my-agent-produce…] indexed:0 read:10min 2026-05-31 ·