TL;DR

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:

Instagram insights for the Tulum spare-tire scam reel: 3,943,661 views, 100% non-followers, 1,847,095 accounts reached, 2,622 likes, 406 comments, 518 saves, 986 shares, 5,265 accounts engaged.
3,943,661 views, 100% non-followers, 1.85M accounts reached — and 986 shares against 518 saves and 2,622 likes.

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',
}
# POST, then poll /predictions/{id}/result every 8s until the
# status flips to completed, then stream the mp4 to disk.

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

# measured from the actual rendered frame, not a fixed 1080x1920
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))
# beat i appears at beat_start + i*segment, behind a translucent
# black box, drawn with an alpha ramp so it fades in cleanly.

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.