Skip to content

nord342/ad-whisperer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ad-whisperer

Rip the script out of any video ad — TikTok, YouTube Shorts, Reels, Meta Ad Library, X, whatever yt-dlp can grab — transcribe it locally with Whisper, and auto-extract the hook, CTA, and copy patterns into a clean swipe file.

Built for media buyers, UGC creators, creative strategists, and copywriters who study winning ads at scale.

$ ad-whisperer https://www.tiktok.com/@brand/video/123...

   Downloading audio...               ok (4.2s)
   Transcribing (whisper small)...    ok (11.1s)
   Analyzing creative...              ok

   HOOK        "POV: you just found the skincare routine..."
   CTA         "link in bio — first 100 get 40% off"
   WORDS       187  (WPM: 152)
   STRUCTURE   PAS  (Problem → Agitate → Solve)
   EMOTIONS    urgency, curiosity, social-proof

   → swipe/tiktok_brand_123.md

Why

Studying other people's ads is the single highest-ROI thing a creative strategist does. But nobody wants to:

  • Re-watch the same 30-second ad ten times to transcribe the hook.
  • Pay per-minute transcription services when you're dissecting 200+ ads a week.
  • Send your client's unreleased competitor research to a third-party API.

ad-whisperer runs entirely on your machine, batch-processes a whole swipe list overnight, and gives you searchable, structured output you can grep, diff, or drop into Notion / Airtable.

Features

  • Any source yt-dlp supports — TikTok, YouTube (incl. Shorts), Instagram Reels, Facebook / Meta Ad Library, X / Twitter, Vimeo, and 1000+ more.
  • Local Whisper via faster-whisper — 4x faster than reference Whisper, runs on CPU.
  • Hook extraction — isolates the first 3 seconds (the part that decides whether the ad works).
  • CTA detection — finds "link in bio", "swipe up", "first N get X", "comment the word…", "tap below", etc.
  • Structure tagging — classifies as AIDA, PAS, 4Ps, Story-Lesson-Application, or unstructured.
  • Emotional-trigger tagging — urgency, curiosity, social proof, FOMO, authority, contrarian.
  • Batch mode — feed it a .txt of URLs, it builds a full swipe library.
  • Output formats — per-ad Markdown, combined CSV, and JSON for programmatic use.

Install

pipx install ad-whisperer
# or
pip install ad-whisperer

You'll also need ffmpeg on your PATH:

brew install ffmpeg        # macOS
sudo apt install ffmpeg    # Debian/Ubuntu

Quick start

Single ad:

ad-whisperer https://www.tiktok.com/@nike/video/7234567890

Batch (swipe file):

ad-whisperer --batch urls.txt --out swipe/ --model small

Bigger model for noisy / accented audio:

ad-whisperer URL --model medium

CSV rollup of everything you've transcribed:

ad-whisperer --rollup swipe/ > swipe-library.csv

Output

Each ad produces a file like this:

# Nike — TikTok 7234567890

- **URL:** https://www.tiktok.com/@nike/video/7234567890
- **Duration:** 28.4s
- **Words:** 72
- **WPM:** 152
- **Structure:** PAS
- **Emotional triggers:** urgency, social-proof

## Hook (0.0–3.0s)
> "If you still haven't tried these, you're missing the whole point."

## Full transcript
...

## CTAs detected
- "link in bio"
- "limited drop — gone by Sunday"

See examples/ for real output.

CLI reference

ad-whisperer [URL ...] [OPTIONS]

Options:
  --batch PATH         Text file of URLs, one per line.
  --out DIR            Output directory (default: ./swipe).
  --model NAME         Whisper model: tiny|base|small|medium|large-v3
                       (default: small — good balance of speed / accuracy).
  --language CODE      Force language (e.g. "en"). Default: auto-detect.
  --hook-seconds N     Seconds to treat as hook (default: 3.0).
  --format FMT         md|json|both (default: both).
  --rollup DIR         Scan a swipe dir, emit CSV to stdout.
  --no-download        Skip download, use existing audio file as input.
  -v, --verbose        Verbose logging.

Privacy

Audio and transcripts never leave your machine. No API keys required. No telemetry.

License

MIT — see LICENSE.

Contributing

Issues and PRs welcome. If you run a creative shop and want a specific structure template or CTA pattern added to the analyzer, open an issue with a few example ads.

Releases

No releases published

Packages

 
 
 

Contributors

Languages