← ClaudeAtlas

harvest-testimonialslisted

Fetch testimonials that already exist and collect each client's words and photo. Sources: YouTube channel videos (titles, auto-caption transcripts, face frames via yt-dlp + ffmpeg), web pages (blog testimonial sections), and social/community platforms (Skool, Facebook, LinkedIn, Instagram, blog comments — via a browser-control or computer-use skill in the owner's own logged-in session). Use whenever the user asks to gather, collect, pull, or mine testimonials, reviews, or client quotes from their YouTube channel, website, blog, or social communities — before anything is designed. Output is raw material (quote + name + role + face image per client), and EVERY candidate passes a mandatory qualification gate (script pre-filter + scored rubric) before design. Pair with graphic-testimonials to turn the harvest into branded card images.
MyAiFreedomSystems/harvest-testimonials · ★ 0 · AI & Automation · score 70
Install: claude install-skill MyAiFreedomSystems/harvest-testimonials
# Harvest Testimonials Fetches existing client proof and returns, per client: **quote, name, role, face image**. Requires `yt-dlp`, `ffmpeg`, `ffprobe`. Work in a scratch dir inside the project workspace; delete `.mp4` files when done, keep `.txt` transcripts and contact sheets as source material. ## 0. Dedupe first List what the user already has (existing Canva cards via `get-design-content`; site cards via alt texts) and skip those people. Users hate duplicate proof. > **Tool fallback:** `get-design-content` is a Canva-specific tool. If you don't have it, use whatever design-listing/export capability you do have (list designs, export thumbnails, screenshot the card gallery), or simply ask the user for the names already on cards and record them manually. Never skip dedupe entirely just because the exact tool is missing. ## 1. YouTube source ```bash # list every video on the channel yt-dlp --flat-playlist --print "%(id)s | %(title)s" "https://www.youtube.com/@CHANNEL/videos" # transcript (auto-captions) yt-dlp --skip-download --write-auto-subs --write-subs --sub-langs "en.*" --sub-format vtt -o "%(id)s.%(ext)s" "https://www.youtube.com/watch?v=ID" python3 scripts/clean_vtt.py <id> # reads <id>.en.vtt, writes <id>.txt # low-res video for face frames yt-dlp -f "worst[ext=mp4]/worst" -o "%(id)s.%(ext)s" "https://www.youtube.com/watch?v=ID" python3 scripts/contact_sheets.py <id> [<id>...] # writes sheet_<id>.png ``` - Channel pages are JS-rendered — plain HTTP fetche