Agent skill · Media & Video

wjs-reframing-video

Use when the user wants to convert a video between horizontal and vertical orientations while preserving the inverted aspect ratio (16:9 ↔ 9:16, 4:3 ↔ 3:4, 21:9 ↔ 9:21). The skill crops a narrow band from the source and tracks the active speaker — the person whose mouth is moving — via MediaPipe face landmarks and mouth-aspect-ratio variance, so the talker stays in frame even when other people are visible. Triggers — "横转竖", "竖转横", "做成竖屏发抖音/视频号/小红书", "16:9 to 9:16", "make this vertical for Reels / TikTok / YouTube Shorts", "crop to portrait", "convert to landscape".

jianshuogithub.com/jianshuoGitHub ↗
claude-codecodexships scriptsMIT
Install
npx skills add jianshuo/claude-skills --skill wjs-reframing-video --agent claude-code

Same command for any agent — swap --agent for codex, cursor, copilot.

Facts
Files in the skill folder: 4
SKILL.md size: 12 KB
Bundled scripts: yes
Path: wjs-reframing-video/SKILL.md
Open the folder on GitHub →
Where it comes from
Stars: 112
Language: Python

Weekly change comes from our own snapshots, not the repository page — it measures attention, not adoption.

From the SKILL.md

# wjs-reframing-video Convert a video's orientation by **cropping** a narrow band from the source — not by physically rotating it. The crop window follows the **active speaker** (the face whose mouth is *moving*), not just the largest or most-confident face. A `.crop.json` sidecar records the crop plan, the per-segment speaker decisions, and the parameters used. The original input is never modified. ## When to use - Repurposing a 16:9 podcast / interview / talk for vertical short-video platforms (WeChat Channels 视频号, Douyin 抖音, Xiaohongshu 小红书, YouTube Shorts, TikTok, Reels). - Repurposing a 9:16 phone recording for horizontal players (YouTube long-form, blog embeds). - Repurposing 4:3 archive footage for 3:4 mobile, or vice versa. The output aspect is the source aspect with width and height swapped — 16:9 → 9:16, not "letterboxed 16:9 in a 9:16 frame". ## When NOT to use - **Multi-person Q&A** where each face needs its own crop — this skill picks one crop track per video. For per-speaker split renders, use **wjs-editing-multicam** instead. - **Animated content / B-roll with no faces** — falls back to center crop, usually wrong for the intent. - **Heavy camera motion in the source*

What's inside
Steps it walks through
  1. When to use
  2. When NOT to use
  3. What this skill IS — and IS NOT
  4. Dependencies
  5. Crop math
  6. Pipeline
  7. Sidecar schema (<input>.crop.json)
  8. Performance
  9. Common pitfalls
  10. Zero-detection fallback: deterministic fixed crop
Ships with 3 files
  • models/blaze_face_short_range.tflite
  • models/face_landmarker.task
  • scripts/crop.py
Commands it runs
pip install mediapipe opencv-python numpy
left speaker  → x=0      right speaker → x=1920-608=1312      centred → x=656
Do crop + (HLG→SDR tone-map) + 30fps + dense keyframes in ONE pass so the
body clip is final and HyperFrames can seek it (see /wjs-overlaying-video).
More from claude-skills
All skills →
About this skill
What does the wjs-reframing-video skill do?

Use when the user wants to convert a video between horizontal and vertical orientations while preserving the inverted aspect ratio (16:9 ↔ 9:16, 4:3 ↔ 3:4, 21:9 ↔ 9:21). The skill crops a narrow band from the source and tracks the active speaker — the person whose mouth is moving — via MediaPipe face landmarks and mouth-aspect-ratio variance, so the talker stays in frame even when other people are visible. Triggers — "横转竖", "竖转横", "做成竖屏发抖音/视频号/小红书", "16:9 to 9:16", "make this vertical for Reels / TikTok / YouTube Shorts", "crop to portrait", "convert to landscape".

How do I install it?

Run `npx skills add jianshuo/claude-skills --skill wjs-reframing-video --agent claude-code` — it drops the skill into your project so the agent can pick it up. Swap the --agent value for codex, cursor or copilot if you use one of those.

Where does this skill come from?

From jianshuo/claude-skills, a repository with 112 stars. We read it straight from the repository tree rather than a submitted listing, so what you see here is what is actually published.

Is a popular skill a good skill?

Not necessarily. Stars measure attention, not adoption — a repository can trend for a week and be abandoned. That is why we show the weekly change from our own snapshots next to the total, instead of a single flattering number.

Keep going