demo-promo — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited demo-promo (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
End-to-end pipeline that turns a long raw screen-recording into a tight, branded, voiced promo. Landscape 16:9 (LI / YouTube / FB / X). For 9:16 reels use reel-studio instead.
Proven on: Videos/2026-05-29_claude-autopublish_FINAL.mp4 (8:12 raw → 1:52 promo).
Raw demo/screencast + user wants it "polished", "perfect", "engaging", with hook / heading / voiceover / music. NOT for talking-head vertical reels (→ reel-studio), NOT for static social cards (→ social-stack).
*_POLISHED.mp4 (keep as backup; original audio).*_FINAL.mp4.recipes/build_promo.py is the runnable orchestrator — edit the CONFIG block at the top and run. It encodes every gotcha below.
CREAM=0xF5EFE1 EMERALD=0x0E7C5A MINT=0x8fe3c4 BLACK=0x1A1A1A GREY=0x6b6b6b
Fonts: Impact (C:/Windows/Fonts/impact.ttf) for headlines · Arial Bold (arialbd.ttf) for straps/body
Encode: -c:v libx264 -preset fast -crf 16 -pix_fmt yuv420p -r 60 -movflags +faststartHandle is @yourhandle everywhere (use one consistent handle).
~/.claude/secrets/elevenlabs.env (ELEVENLABS_API_KEY=sk_...)onwK4e9ZLuTAKqWW03F9 (British, broadcaster). American alt: pick a US voice id.eleven_multilingual_v2, settings {stability:0.5, similarity_boost:0.75, style:0.0, use_speaker_boost:true}curl --data-binary @body.json.Mike Chang BGM: <repo>/interview-clip-engine/assets/bgm/mixkit-cinematic-871.mp3 (101s). Other cinematic beds in the same bgm/ folder. Or source fresh from Mixkit (https://assets.mixkit.co/music/NUMBER/NUMBER.mp3).
-filter_complex_script — a stray / (-/filter...) = "Invalid argument".impact.ttf/arialbd.ttf into the working dir and reference fontfile=impact.ttf. Avoids escaping the C: colon inside drawtext.asplit=2[vmix][vkey]. If you reuse [voice] directly, the voice vanishes from the mix (only ducked bgm survives, ~-45dB).apad the VO to the full timeline length so a (silent) key exists end-to-end → bgm un-ducks and rides the outro.loudnorm=I=-15:TP=-1.5:LRA=11,aformat=channel_layouts=stereo:sample_rates=44100 → WAV, then mix that. Do NOT loudnorm inside the realtime graph.-stream_loop 1 the bgm input + dynaudnorm=f=250:g=8 to flatten, so the outro keeps a present bed. Then your own afade controls the ending.x=(w-text_w)/2.%s MUST equal the tuple length, in order. Miscount = TypeError: not all arguments converted. Prefer building the string without % if it gets hairy.duration=longest:normalize=0 (normalize=0 keeps VO loud; longest keeps the music tail). Trim/atrim the bgm to the timeline length so longest doesn't blow out to the looped 202s.trim+setpts=PTS-STARTPTS per segment, xfade=transition=fade:offset=<segA_dur-0.5> for the join, acrossfade for audio. Verify segment math with a frame extract at the join.ffprobe duration + volumedetect on 4-5 windows (intro / VO body / callout / outro) + extract frames at each overlay beat and look at them. Max_volume should sit ~ -4dB (headroom, no clip).from faster_whisper import WhisperModel
m=WhisperModel("small", device="cpu", compute_type="int8")
segs,_=m.transcribe("voice_loud.wav")
for s in segs: print(f"{s.start:6.1f}-{s.end:6.1f} {s.text.strip()}")main_local_time = VO_local_time + VO_lead (e.g. +2.5s). Place: image PiP at the "it built X" line, chip strip at the "publishes to A,B,C" line, benefit callout at the "replaces a team / saves hours" line. Rotate the top strap on the phase boundaries.
<date>_<slug>_POLISHED.mp4 (cut + grade, original audio, backup) and <date>_<slug>_FINAL.mp4 (full promo). Write to the user's Videos/ folder.
recipes/build_promo.py — the exact, parametrized orchestrator (CONFIG block → run). references/EXAMPLE-claude-autopublish.md — the 2026-05-29 build that defined this skill (config + timings + script).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.