Communitygithub.com

jsath/claude-skills

Turn a raw talking-head take into a dynamically edited 1080x1920 reel: full-face, full-graphic and split layouts that switch every 2 to 5 seconds, real UI and official-logo panels, captions on every word timed by Whisper, voice plus synthesised SFX (no music bed) mastered to -14 LUFS, and hard QA gates (caption sync on the final render, A/V length, loudness, colour, framing, contact sheet, claims). Also covers writing the script so it does not read as AI. Use when asked to 'edit this reel', 'make it look edited', 'add captions / dynamic layout / graphics', or 'write a reel script'.

claude-skills 是什麼?

claude-skills is a Claude Code agent skill that turn a raw talking-head take into a dynamically edited 1080x1920 reel: full-face, full-graphic and split layouts that switch every 2 to 5 seconds, real UI and official-logo panels, captions on every word timed by Whisper, voice plus synthesised SFX (no music bed) mastered to -14 LUFS, and hard QA gates (caption sync on the final render, A/V length, loudness, colour, framing, contact sheet, claims). Also covers writing the script so it does not read as AI. Use when asked to 'edit this reel', 'make it look edited', 'add captions / dynamic layout / graphics', or 'write a reel script'.

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jsath/claude-skills/tree/HEAD/skills/video/edit-style

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Edit style: dynamic vertical reels from a raw take

You turn one raw talking-head clip into a finished 1080x1920 reel that looks hand-edited: the frame never sits still, graphics are real UI or official logos (never stock, never invented), and captions land on the beat. Nothing is dragged on a timeline. Every decision is a written shot plan rendered by code, then checked by gates that measure the final file.

Part of a pipeline: use-local-whisper (transcription) -> edit-style (short-form edit) or longform-edit (YouTube long-form) -> reel-captions (post text) -> thumbnail-generator (covers).

Requirements

Claude Code on a computer (not Claude.ai: it needs a shell and ffmpeg).

needforinstall
ffmpeg + ffprobe (with ebur128)every cut, composite, gatebrew install ffmpeg / apt install ffmpeg
Python 3.9+ and Pillowcaptions, cue alignmentpip install pillow
a local Whisperword timestampssee the use-local-whisper skill
OpenCV (optional)framing gate, crop solverpip install opencv-python-headless + YuNet model (see tools/face_box.py)
Node + Playwright (optional)headless screen capturenpm i playwright && npx playwright install chromium
Remotion (optional)animated graphic panelsnpx create-video@latest; a full panel studio is in github.com/johannships/reels-engine
swiftc, macOS only (optional)iPhone HDR to SDRxcode-select --install

Install check: sh tools/check_setup.sh (exit 0 = ready).

Inputs

  • raw.mov (or mp4): one take, phone or camera, any orientation.
  • script.txt: what was said, spelled the way it must appear on screen. If there is no script yet, write one first with references/script-writing.md.
  • Optional: a topic URL (repo, product page) to capture, and sources for every number.

Pipeline (one folder per reel: every file for this reel lives inside it)

transcribe.py below is use-local-whisper/scripts/transcribe.py. Parallel edits never share a work folder: one reel, one folder.

  1. Check the source. ffprobe -v error -select_streams v:0 -show_entries stream=color_range,color_transfer,r_frame_rate -of csv=p=0 raw.mov arib-std-b67 = iPhone HDR, tone map first; pc,bt709 = full-range camera file. Exact handling: references/source-footage.md.
  2. Cut retakes, then pauses. Transcribe raw (transcribe.py raw.mov), keep the LAST take of any repeated line, never cut mid-word. Then python3 tools/tighten.py cut.mp4 tight.mp4 (-50 dB, never -38 dB).
  3. Transcribe the tightened take: transcribe.py tight.mp4 gives tight.words.json.
  4. Write the shot plan (shots.json): one row per shot, {layout, anchor_phrase, content}. anchor_phrase is script text matched against words.json so the shot starts when those words are said. Never hand-type timestamps. Layout rules: references/edit-craft.md.
  5. Capture and fetch assets. Screens: node tools/capture_clock.js <url> shots/s3 6 (headless, frame-exact). Logos: the brand's official press page or site SVG only. Open every asset and look at it before use.
  6. Frame the face per take: python3 tools/face_box.py tight.mp4 --model yunet.onnx --solve full (and --solve pip). Never reuse crops from another take.
  7. Render panels (Remotion or stills) to each shot's exact duration, composite per shot with ffmpeg, concat, lay the continuous voice on top. Run renders under nice -n 15. Look-dev on stills, then one full render.
  8. Mix and master (references/edit-craft.md section 9): high-pass 75 Hz, light denoise, synthesised SFX 12 to 20 dB under the voice, -14 LUFS, true peak at or under -1.5 dBTP.
  9. Captions, timed on the FINAL audio: transcribe.py final_nocaps.mp4, then python3 tools/make_cues.py script.txt final_nocaps.words.json --fix fix.json, then python3 tools/burn_captions.py final_nocaps.mp4 cues.json final.mp4 --caps. Text comes from the script, timing from Whisper. --y 0.38 on PIP shots.
  10. Gates (below). Fix and re-run until all pass.

Layouts

layoutwhatwhen
FULLface fills the frame (head-top 13%, chin 85%)hook, personal beats, close
GFXfull-screen real UI, stat or claim card, no faceeach key beat, the CTA
PIPgraphic on top, face in a rounded card at the bottom (y 1086, 1080x834, radius 48)naming a tool while still talking

Switch every 2 to 5 s. Open on FULL or PIP, break to GFX on each key beat, land the CTA on GFX, close on FULL. If the topic is a named brand, show its official logo in the first 2 s.

QA gates (all must pass; write results to QA.md)

#gatetoolpass
1framingface_box.py final.mp4head-top > 3%, chin < 94% on every sample
2caption sync per chapter, on the final renderre-transcribe final, caption_sync_gate.py captions.json final.words.json chapters.jsonmedian <= 0.12 s, p95 <= 0.25 s
3A/V lengthfinal_gates.sh final.mp4within one frame
4loudnessfinal_gates.sh-14 +/- 1 LUFS, true peak <= -1.5 dBTP
5colour/encodefinal_gates.shyuv420p, tv range, BT.709 tags, >= 8 Mbps
6skin luma vs sourceskin_luma_check.shwithin 2 levels
7first word survivesre-transcribe first 2 sfirst script word present
8contact sheetfinal_gates.sh writes contact.pngyou OPENED it: no pills or stickers, no caption over the mouth, logos correct, nothing private, every label inside the 4:5 crop (y 285 to 1635)
9claimsmanualevery on-screen number has a named source checked live today; false spoken lines are cut and listed

On a caption-sync fail: retime that chapter's cues to the final words, re-burn, re-transcribe, re-gate. Loop until every chapter passes.

Output

reel-folder/
  final.mp4        1080x1920, H.264 BT.709, AAC 48 kHz, -14 LUFS
  captions.srt     from the re-transcription of final.mp4, names spelled right
  contact.png      12-frame sheet you looked at
  QA.md            one line per gate, plus CLAIMS and any cuts of private detail
  LOG.md           written as you go

Example QA.md:

framing      12/12 PASS (head-top min 6.1%, chin max 88.4%)
caption sync hook median 0.04 p95 0.11 PASS | body 0.05/0.14 PASS | cta 0.03/0.09 PASS
A/V          diff 0.012s PASS     loudness -14.1 LUFS, -1.8 dBTP PASS
colour       yuv420p tv bt709 13.9 Mbps PASS   skin luma diff 1.2 PASS
contact      looked: no pills, captions clear of mouth, logos official, 4:5 safe
CLAIMS       "40,000 stars": GitHub API 14:05 today = 41,212 (shown as 41K)

Failure handling

  • No Whisper: stop and install one (use-local-whisper). Never guess timings.
  • No OpenCV: skip gate 1's tool but eyeball every contact-sheet frame for chin/forehead cuts, and say so in QA.md.
  • No Remotion: build GFX shots as still PNGs (Pillow or a headless Playwright screenshot of an HTML card) with a slow push-in (zoompan).
  • make_cues.py exits 2 (script and audio differ): fix the script to match what was said. Never burn captions that disagree with the voice.
  • A gate fails three loops in a row: stop, report the numbers, ask.

Rules that keep it from looking like AI

  • No floating pills, badges, corner tags, stickers or REC chips. Ever.
  • No code-generated motion-graphics sizzle. Real footage and real product screens.
  • One accent colour. One caption style per shot type.
  • Show, don't narrate: when the voice names a thing, that thing is on screen.
  • Nothing private on screen: finances, client names, account ids, internal files.
  • No em or en dashes in scripts or captions.

Depth: references/script-writing.md (hooks, register, numbers), references/source-footage.md (HDR, full-range cameras, clone takes, silence), references/edit-craft.md (captions, screens, framing, gestures, audio, pitfalls).

Individual skills in this repo

This repo contains 11 individual skills — each has its own dedicated page.

jsath/claude-skills

Writes captions for a finished video from its transcript: pulls the line worth repeating, writes first-line options, writes per-platform versions (Instagram, TikTok, YouTube title and description, others on request), keeps the creator's voice using their best past captions, and checks the call to action matches what the video actually says. Use when a creator asks for captions, a caption hook, a YouTube title and description, or a CTA check. Drafts only; never posts or schedules.

jsath/claude-skills

Write CAPTIONS-PLATFORMS.md for one finished short video: a per-platform post caption for Instagram, TikTok, YouTube Shorts (title + description), Facebook, Threads, Bluesky and X, each within that platform's limits, with your comment-keyword CTA on the platforms where it belongs and never on X. Keyword, CTA, platforms, hashtags and limits come from a config file; a checker script fails the file on any miss. Use after an edit is finished, when asked to 'write the captions', 'caption this reel for every platform', or before scheduling.

jsath/claude-skills

Transcribe audio or video on your own machine with Whisper (mlx-whisper, faster-whisper or whisper.cpp) and get word-level timestamps as words.json, a plain .txt and an .srt. No API key, nothing uploaded. This is the transcription step the editing skills (edit-style, longform-edit, reel-captions) depend on. Use when asked to transcribe a take, get word timings, make an SRT, re-transcribe a final render for a caption sync check, or 'run whisper locally'.

jsath/claude-skills

Turns one published long-form video or podcast transcript into up to thirty pieces: 10 clips with new hooks and exact timestamps, 8 X posts, 4 LinkedIn posts, 3 carousels, 2 threads, a newsletter, a community post and a blog post, laid out on a two-week plan, all built only from what was said. In Claude Code it also cuts, reframes and captions the clips with ffmpeg. Use when someone wants to repurpose a long video, find clips, or write social posts from a transcript. Never posts or schedules.

jsath/claude-skills

Edits a raw long-form YouTube recording (screen recording export, camera file, or either plus a separate mic) into a publish-ready video automatically, like Descript on autopilot: transcribes with word timestamps, removes retakes and keeps the last take, tightens dead space while keeping silent on-screen action (speeding up long waits), masters the voice to -14 LUFS / -1.5 dBTP with no music bed, re-transcribes the FINAL render for an every-word SRT (optional burned-in captions), drafts chapters, titles and a description, and fails loudly on QA gates (words, A/V sync, caption sync per chapter, caption coverage, loudness) plus contact sheets you look at. Use when someone says edit this long-form, clean up my recording, cut the retakes and dead space, process the long-form inbox, or descript this. Needs Claude Code with ffmpeg, whisper.cpp and Python 3.

jsath/claude-skills

Turns one podcast episode transcript into a week of written content: an Episode Prep agent that checks the transcript and speaker names, a Clip Spotter that picks the best short-clip moments with exact timestamps and hooks for an editor to cut, a Show Notes Writer that writes show notes and chapter markers, a Repurpose Writer that turns the big ideas into a newsletter, a LinkedIn post and Instagram captions, and an Episode Planner that spreads it all over the week. Works from a transcript the user supplies or exports from their transcription tool. It does not edit audio or video and does not cut clips. Use when a podcaster asks for show notes, chapters, clip timestamps, or posts from an episode, or says \"repurpose this episode\". Drafts only; never posts.

jsath/claude-skills

Turns one raw talking-head take into a finished 1080x1920 vertical reel in Claude Code with free local tools (ffmpeg, whisper.cpp, headless Playwright): transcribes, keeps the last take of repeated lines, cuts pauses, captions every word, adds real screenshots and official logos, and runs measured QA gates. Use when someone wants a raw phone take edited into a Reel, TikTok or Short, retakes and silences cut, word-by-word captions, or a finished video checked. In Claude.ai it only produces a cut list, shot plan and .srt from a pasted transcript.

jsath/claude-skills

Turns notes, voice-note transcripts and half ideas into Reel, TikTok and YouTube scripts in the creator's own voice: ranks an idea bank, writes ten hooks per idea, writes the script at the right length, rewrites anything that sounds like AI using transcripts of the creator's past videos, and fact-checks every claim with a source and date. Use when someone wants a video script, hooks, a ranked list of what to film, a voice pass, a claims check, or a record sheet to read from while filming.

jsath/claude-skills

Reviews and rewrites a video script (YouTube long-form, a short, or a talking-head reel) so it sounds like one person talking to one friend and holds attention: kills forced analogies and presenter phrases, fixes framing, checks hooks, open loops and re-engagement beats, and suggests titles. Use when someone says fix this script, polish my script, make it sound like me, tighten this before I film, or asks for a hook or title for a video. Returns the rewritten script plus a short change log.

jsath/claude-skills

Make a 1280x720 YouTube thumbnail (or a banner/cover) that reads at phone size: a text-free background plate (generated or from a real frame), a real cutout of the person, 1 to 3 words in tight colour blocks, an official logo, composed by a script that checks overlaps and frame edges and renders the 320px and 168px views you must look at. Use when asked for a thumbnail, cover, banner, 'make this clickable', or to fix a thumbnail that looks cluttered or small.

jsath/claude-skills

Runs five agents that keep a YouTube channel's titles and descriptions matched to what people search for now: a Channel Reader that pulls the user's own video list and stats with their YouTube Data API key, YouTube Analytics OAuth or a pasted YouTube Studio export, a Niche Watcher that finds what is working right now for similar-size channels from public search results the API returns or the user provides, a Title Writer that drafts titles, descriptions and chapters for new videos, a Back Catalogue agent that picks old videos worth a refresh and drafts new versions, and a Change Tracker that records every change the user makes and compares before and after on matched windows. Use when a creator asks for YouTube SEO, better titles or descriptions, what is working in their niche, a back catalogue refresh, or says \"seo run\". Never invents search volumes or stats and never changes a video; drafts only.

相關技能