AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Podcast Shorts

skill-shawnla90-gtm-coding-agent-podcast-shorts · by shawnla90

Turn a raw podcast or interview recording into captioned vertical shorts staged as Buffer drafts. Invoke on "podcast to shorts", "cut podcast shorts", "clip this episode", "/podcast-shorts", or when the user hands over a long recording and asks for social clips.

No reviews yet
0 installs
0 views
view→install

Install

$ agentstack add skill-shawnla90-gtm-coding-agent-podcast-shorts

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-shawnla90-gtm-coding-agent-podcast-shorts)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
today

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Podcast Shorts? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

podcast-shorts — transcript-anchored vertical clips

Raw recording → word-timestamped transcript → planned cuts → styled overlay render → one-pass master composite → QA gate → social encodes → Buffer drafts.

When to invoke

  • A podcast/interview recording (ideally per-speaker video + WAV exports) needs to become vertical clips.
  • The user describes moments by content ("the story about the pricing call") — the transcript layer turns that into timestamps.

Do NOT invoke for single-source talking-head recuts with no cutting plan, or for meme-style captioning.

Pack layout

/
  pack.json            # the spec — see pack.example.json
  source/              # per-speaker video + lossless WAV exports
  transcripts/         # written by transcribe.py + plan_clips.py
  projects/clip_NN/    # HyperFrames overlay projects (compose_overlay.py)
  out/                 # masters + delivery encodes
  clips/               # word jsons, captions, buffer_urls.json
  review/framing.json  # optional: face_x overrides + cameo source ranges

pack.json schema

See pack.example.json. Per clip: slug, mode (square | wide | guest | duo), lead (speakera | speakerb), start/end (source seconds), start_text/end_text (the words the clip must open and close on — anchors, not guesses), hook (two overlay lines), cta, optional kicker, speaker_names, cameo_text, tx_windows, drops, blocks. Top level: sources, framing_defaults, optional series (day-order slugs for Buffer).

Workflow

  1. Transcribepython3 transcribe.py [idx]. Whisper (word timestamps) per

speaker track. Add your product names to ASR_FIXES first; whisper mangles proper nouns.

  1. Plan cutspython3 plan_clips.py . Anchors the cut on

start_text/end_text word matches, jump-cuts silences, compensates whisper's early word-end stamps (END_COMP/BLEED), writes transcripts/clip_NN.cut.json including fade_start anchored to the last word.

  1. Compose overlaypython3 compose_overlay.py . Graphics-only

transparent HyperFrames project (footage never touches the browser). Keep every text card-host at data-start="0" — card hosts run their own scheduler clock, and a nonzero data-start fights the gsap timeline and flashes on frame 0.

  1. Render — `npx hyperframes render /projects/clip_NN/public --format mov -o

/projects/clip_NN/renders/overlay.mov`. ProRes 4444 alpha; delete after step 5 (300-800MB each).

  1. Composite masterpython3 final_composite.py . One ffmpeg pass:

denoise, speed bake, crops, alpha overlay, loudnorm, end fade. The audio chain ends asetpts=N/SR/TB — do not remove it (see below).

  1. Social encodes./make_delivery.sh. 8-bit yuv420p re-encode, both streams

fresh, asetpts=N/SR/TB on audio.

  1. QA gatepython3 qa_delivery.py delivery _social. Every clip must PASS before

anything is hosted or drafted.

  1. Stage drafts — host the encodes anywhere with public URLs, write

clips/buffer_urls.json ({slug: url}) and clips/captions.json, then python3 buffer_schedule.py all go. Needs BUFFER_ACCESS_TOKEN and BUFFER_ORG_ID env vars. Drafts, not scheduled posts — a human reviews.

The hidden audio-pts gap (read this before changing any audio flag)

The master's audio filter graph (atrim → concat → atempo → loudnorm) can emit a timestamp jump at a cut seam while the audio CONTENT stays continuous. Players and platform ingests play sample-continuously and never show it — masters sound perfect. But any re-encode with a timestamp-aware filter materializes the gap: aresample=async=1 turns it into time-squeezed audio followed by seconds of real silence at the start of the clip.

Rules:

  • The composite's audio chain ends asetpts=N/SR/TB (timestamps rebuilt from sample

position — continuous by construction).

  • Delivery encodes use -af "asetpts=N/SR/TB" and NEVER aresample=async=1.
  • QA compares decoded audio, not just frames: a defect like this is invisible in

every visual check.

QA gate spec (qa_delivery.py)

| check | bar | |---|---| | silencedetect regions | count == the master's (a new region = injected dropout) | | audio cross-correlation vs master | abs lag <= 25ms at 0.2/1/2/5/10s windows | | first video packet | keyframe at pts 0 | | packet timing | uniform CFR | | duration | within 0.1s of master |

Gotchas

  • Whisper word-END stamps run ~0.1s early: never clamp a cut to the next word's start

minus epsilon, or continuous speech collapses the tail and chops the final word.

  • Never overwrite a published object under the same filename — CDNs serve stale bytes

for an hour or more. Version filenames and byte-verify (sha256) what the URL serves.

  • Buffer: pace mutations ~1s apart (rate windows at 15m and 24h); editPost is a full

replace, resend text + assets + metadata with any change.

  • gsap is fetched from jsdelivr on first run (GreenSock license — not committed).

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.