Agent skill

Wjs Reframing Video

by jianshuo in jianshuo/claude-skills

A skill your agent uses 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).

MITAuto-check passedMedia & Creative

Install Wjs Reframing Video

skills CLI
$ npx skills add jianshuo/claude-skills --skill wjs-reframing-video -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jianshuo/claude-skills wjs-reframing-video --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jianshuo/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/wjs-reframing-video .claude/skills/wjs-reframing-video && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
wjs-reframing-video
GitHub stars
131
Token cost
~3k tokens
SKILL.md length
1,320 words
Files
4 (incl. scripts)
Skills in repo
38
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses 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).

  • Works in 10 steps: Probe input dimensions, fps, duration… → Decide orientation — auto from aspect… → Sample frames at --sample-fps (default… → …
  • The user wants to convert a video between horizontal and vertical orientations while preserving the inverted aspect ratio (16:9 ↔ 9:16
  • SKILL.md covers When to use, When NOT to use, What this skill IS — and IS NOT and Dependencies, plus 6 more sections
  • Runs Python scripts from its folder; calls ffmpeg and pip

What it does

Wjs Reframing Video is an agent skill from jianshuo/claude-skills. 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…

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts (for example `scripts/crop.py`).

It sits in Media & Creative, covering Video scripts and shorts. It works with TikTok. The repository describes itself as: 13 Claude Code skills for video production (transcribe / translate / dub / multicam / subtitles / reframe) + WeChat publishing. Compatible with Claude Code, OpenAI Codex CLI… The licence is MIT.

When your agent uses it

  • The user wants to convert a video between horizontal and vertical orientations while preserving the inverted aspect ratio (16:9 ↔ 9:16
  • 做成竖屏发抖音/视频号/小红书
  • Make this vertical for Reels / TikTok / YouTube Shorts
  • Crop to portrait

Example prompts

  • “做成竖屏发抖音/视频号/小红书”
  • “16:9 to 9:16”
  • “make this vertical for Reels / TikTok / YouTube Shorts”
  • “/wjs-reframing-video”

Requirements

  • Python 3

Workflow steps

10 steps, taken from the first numbered list in SKILL.md.

  1. Probe input dimensions, fps, duration via ffprobe.
  2. Decide orientation — auto from aspect (--target portrait|landscape to override).
  3. Sample frames at --sample-fps (default 5; high enough to catch mouth motion — Nyquist for speech is ~10 Hz, we need at least 4–5 fps).
  4. Detect face landmarks per sampled frame with MediaPipe Tasks FaceLandmarker (478 landmarks). For each detected face record: center, size…
  5. Track faces across frames by center-distance matching → each face gets a stable face_id.
  6. Per-sample active speaker: for each face track, variance of MAR over a sliding window (--mar-var-window-sec, default 1 s). The face with…
  7. Hysteresis: a candidate switch only commits if the new speaker is stable for --min-segment-sec (default 1.5 s). Shorter flickers are…
  8. Speaker-aligned segments → for each segment, mean (cx, cy) of that speaker's face over the segment becomes the crop center, fixed for the…
  9. Build a ffmpeg step-function expression (--motion cut, default) that holds each segment's crop position constant and jumps instantly at…
  10. Render one ffmpeg pass — crop=W:H:x='expr':y='expr', scale=OUT_W:OUT_H. The crop filter evaluates x and y per frame natively. Audio…

What it can do on your machine

Read from SKILL.md and the folder at commit b2690f5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • ffmpeg
    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Wjs Reframing Video loads about 3k tokens when it runs. Until then it costs about 148 tokens; SKILL.md has 1,320 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~148
When it runs · the whole SKILL.md, loaded when a task matches
~3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from jianshuo/claude-skills at commit b2690f5, republished under its MIT licence (© jianshuo). 1,320 words, ~3,018 tokens.

Download SKILL.mdSave it as .claude/skills/wjs-reframing-video/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
wjs-reframing-video
description
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".

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 (handheld pan/zoom) — the face tracker amplifies camera shake. Stabilize first.
  • Source already at target aspect — no work to do.

What this skill IS — and IS NOT

IsIs not
Visual active-speaker detection via MAR (mouth-aspect-ratio) varianceAudio-visual fusion (audio energy + lip motion cross-correlated)
Stable face tracking across frames by center-distance matchingRe-identification across long gaps / occlusions
Speaker-aligned segments with hysteresis to prevent flickerFrame-by-frame switching on every flicker
--face-pick speaker (default) — pick whoever's mouth is moving--face-pick largest (opt-in legacy) — pick largest face
Hard cuts between segments, fixed crop within each segment (--motion cut, default)Smooth panning that drifts during a speaker's turn (opt-in --motion smooth)
Audio stream-copy (bit-exact)Audio reprocessing / re-encoding
MediaPipe Tasks FaceLandmarker (478-pt mesh) at 5 fps sampled via ffmpegPer-frame neural inpainting / out-painting
One ffmpeg crop + scale passFrame-by-frame Python compositor

Falls back to "largest face" automatically when no one is talking (silence, music-only stretches).

Dependencies

bash
pip install mediapipe opencv-python numpy

(MediaPipe lives outside the standard Python distribution; ffmpeg and ffprobe must be on PATH.)

First-run model download: MediaPipe 0.10+ uses the Tasks API, which needs a face_landmarker.task model file (~4 MB). On the first call, crop.py downloads it to ~/.claude/skills/wjs-reframing-video/models/ and caches it for subsequent runs. The script fails offline on first run.

Range limitation: The bundled landmarker is tuned for faces within ~2 m of the camera (selfie / podcast / interview distance). Wide event shots with small faces may not detect — sample a frame first to confirm.

Crop math

Source aspect = W / H. Target aspect = H / W (inverted). Compute crop window:

Source orientationCrop window
Horizontal (W > H) → PortraitW_crop = H × H / W, H_crop = H (narrow vertical band)
Portrait (W < H) → HorizontalW_crop = W, H_crop = W × W / H (narrow horizontal band)

For 1920×1080 → portrait, W_crop = 608, H_crop = 1080. Final scale to 1080×1920 (upscale ~1.78×). For 1080×1920 → landscape, W_crop = 1080, H_crop = 608. Final scale to 1920×1080.

Override the final size via --output-size 1080x1920 if you want native crop dimensions instead of upscaling.

Pipeline

  1. Probe input dimensions, fps, duration via ffprobe.
  2. Decide orientation — auto from aspect (--target portrait|landscape to override).
  3. Sample frames at --sample-fps (default 5; high enough to catch mouth motion — Nyquist for speech is ~10 Hz, we need at least 4–5 fps).
  4. Detect face landmarks per sampled frame with MediaPipe Tasks FaceLandmarker (478 landmarks). For each detected face record: center, size proxy, MAR (mouth-aspect-ratio = inner-lip vertical distance / horizontal mouth-corner distance).
  5. Track faces across frames by center-distance matching → each face gets a stable face_id.
  6. Per-sample active speaker: for each face track, variance of MAR over a sliding window (--mar-var-window-sec, default 1 s). The face with the highest variance is "speaking". Below --mar-var-threshold, no one is speaking → fall back to largest face.
  7. Hysteresis: a candidate switch only commits if the new speaker is stable for --min-segment-sec (default 1.5 s). Shorter flickers are squashed — prevents the crop from ping-ponging on a one-frame mis-detection.
  8. Speaker-aligned segments → for each segment, mean (cx, cy) of that speaker's face over the segment becomes the crop center, fixed for the full duration of the segment.
  9. Build a ffmpeg step-function expression (--motion cut, default) that holds each segment's crop position constant and jumps instantly at each segment boundary — the visual feel of a real cut between camera angles. (--motion smooth switches to piecewise-linear pan between segment midpoints; rarely the right call for talking-head content because the camera appears to drift mid-sentence.)
  10. Render one ffmpeg pass — crop=W:H:x='expr':y='expr', scale=OUT_W:OUT_H. The crop filter evaluates x and y per frame natively. Audio stream-copied.

scripts/crop.py is the implementation. Output side effects:

  • <input>.crop.json — sidecar with the crop plan
  • <input>_cropped.mp4 — final cropped + scaled video

Sidecar schema (<input>.crop.json)

json
{
  "_about": "wjs-reframing-video crop plan for cam_a.MOV. Active-speaker detected via MAR variance.",
  "_help": {
    "source_size":     "[width, height] in pixels.",
    "target_size":     "[width, height] of the final rendered output.",
    "crop_window":     "[width, height] of the moving crop in source coords.",
    "chunks":          "Speaker-aligned segments: {t0, t1, cx, cy, speaker_id}.",
    "face_pick_mode":  "speaker = MAR-variance active-speaker; largest = old behavior.",
    "speaker_id":      "Stable face track id. null means no face / silence fallback."
  },
  "schema_version": 2,
  "source": "cam_a.MOV",
  "source_size": [1920, 1080],
  "target": "portrait",
  "target_size": [1080, 1920],
  "crop_window": [608, 1080],
  "face_pick_mode": "speaker",
  "sample_fps": 5.0,
  "mar_var_window_sec": 1.0,
  "mar_var_threshold": 1.5e-4,
  "min_segment_sec": 1.5,
  "chunks": [
    {"t0":  0.0, "t1":  4.2, "cx": 808, "cy": 540, "speaker_id": 0},
    {"t0":  4.2, "t1": 11.6, "cx": 1182, "cy": 540, "speaker_id": 1},
    {"t0": 11.6, "t1": 14.0, "cx": 808, "cy": 540, "speaker_id": 0}
  ],
  "face_sample_count": 1234,
  "track_count": 2
}
Show full SKILL.md (543 more words)Show less

Performance

  • Detection is the slow step. On Apple Silicon at 2 fps sampling, expect ~10–20× realtime (a 30-min source detects in ~1–2 min). Bumping --sample-fps makes detection slower but tracking more responsive.
  • Render is fast — single ffmpeg pass with hardware encode (hevc_videotoolbox on macOS). Often <1× realtime for a 1080p source.
  • For very long sources (>200 chunks), the ffmpeg expression gets cumbersome; the script auto-downsamples chunk midpoints to keep the expression under ~200 control points.

Common pitfalls

  • Mouth gestures aren't speech — a yawn, laugh, eating, or sucking-in-air all raise MAR variance. The detector can briefly mistake these for talking. For high-stakes content, eyeball the speaker timeline in the sidecar (the script prints a face#N: Xs on screen (Y%) summary) and re-run with a different --mar-var-threshold if needed.
  • Side-profile or down-tilted faces — when a face is rotated >60° from camera, MediaPipe may fail to land mouth landmarks reliably, so MAR variance flatlines. The speaker fallback to "largest face" kicks in. If you have a long stretch of profile shots, consider --face-pick largest.
  • Two faces with overlapping speech (interruption / talking over) — both faces have MAR variance, only one wins. The losing face is treated as listener. For accurate per-speaker tracking under crosstalk, use wjs-editing-multicam with separate cams.
  • Long stretches of silence (B-roll, music) — falls back to largest face. If the largest face is wrong (e.g. a listener stays still while the speaker's mic feeds music), you'll see drift. Pre-segment around music-only sections.
  • Source has burned-in lower-thirds / subtitles — for H→V, the lower band gets cropped out; for V→H, it stays but gets stretched. Strip burn-ins before running.
  • Wide-angle / fish-eye lenses — landmarks miss faces near edges. Pre-correct distortion with ffmpeg lenscorrection first.
  • Upscaling artifacts — 608×1080 → 1080×1920 is a 1.78× upscale and visible on sharp text. Render at native crop dims (--output-size 608x1080) and let the platform upscale, if you have overlays you want to keep sharp.
  • Output bitrate > platform limit — default is --bitrate 12M. WeChat Channels (视频号) caps at 10 Mbps; pass --bitrate 8M for that target.

Zero-detection fallback: deterministic fixed crop

The "may not detect" range limit isn't just a warning — when MediaPipe detects 0 faces (far/static two-person interview, ~2 m+ from a wide lens), the crop log reads 0 face observations across N sampled frames and the script center-crops the frame — which on an interview set lands the window on the background between the two people (a fireplace, a plant, a logo), not on anyone. The output looks broken and no --mar-var-threshold tuning helps, because there are no landmarks at all.

Always read the crop log before trusting the output. If it says 0 face track(s) identified / (no face / fallback): … 100%, abandon the MediaPipe crop and do a deterministic fixed crop instead. The camera on these shoots is static and the speakers sit at fixed screen positions, so a hand-set X offset is rock-solid:

bash
# 1920×1080 → 9:16 ⇒ crop window 608×1080. X = speaker's screen position:
#   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).
ZF=~/Library/Python/3.9/.../imageio_ffmpeg/binaries/ffmpeg-macos-aarch64-v7.1
"$ZF" -i clip.mp4 -vf \
  "crop=608:1080:0:0,zscale=t=linear:npl=203,format=gbrpf32le,\
tonemap=tonemap=hable:desat=0,\
zscale=w=1080:h=1920:t=bt709:m=bt709:p=bt709:r=tv,format=yuv420p,fps=30" \
  -c:v libx264 -crf 19 -preset medium -g 30 -keyint_min 30 \
  -color_primaries bt709 -color_trc bt709 -colorspace bt709 \
  -c:a aac -b:a 192k -movflags +faststart clip_vert.mp4

Verify by extracting a frame (-ss 20 -frames:v 1) and confirming the speaker is centred before committing. For clips that genuinely need to follow both speakers (heavy back-and-forth), hand-label per-speaker windows from the transcript and concatenate fixed crops; for a clip that is one person's monologue, a single fixed X is enough. Drop the tonemap filters if the source is already SDR (bt709) — applying the HLG recipe to SDR mis-colors it.

© jianshuo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (scripts) in wjs-reframing-video of jianshuo/claude-skills.

  • SKILL.md
  • models/blaze_face_short_range.tflite
  • models/face_landmarker.task
  • scripts/crop.py

Open the folder on GitHubat commit b2690f5

Compare with similar skills

Wjs Reframing Video next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Wjs Reframing Video compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Wjs Reframing Video this skilljianshuo/claude-skills131—~3kAutomated safety check: PassMIT
Viral Captions And Ctasvyralcontent/content-skills1341 repos~2.8kAutomated safety check: PassMIT
Shortform Idea Grillericosiu/ai-marketing-skills3.6k—~1.2kAutomated safety check: PassMIT
Viral Short Form Ideasvyralcontent/content-skills1341 repos~2.9kAutomated safety check: PassMIT
Viral Tiktok Contentvyralcontent/content-skills1341 repos~2.7kAutomated safety check: PassMIT
Viral Youtube Shortsvyralcontent/content-skills1341 repos~3kAutomated safety check: PassMIT

Similar skills

  • Viral Captions And Ctas

    vyralcontent/content-skills

    Write captions, on-screen text, hashtags, and CTAs for short-form video that earn saves and sends without tripping engagement-bait penalties.

    134 GitHub starsUsed in 1 repo~2.8k tokens
    Media & CreativeAuto-check passed
  • Shortform Idea Grill

    ericosiu/ai-marketing-skills

    Interview a founder or senior marketer one question at a time, mine current work and owned proof for net-new short-form video ideas, and return a ranked table with one five-second overlay hook…

    3.6k GitHub stars~1.2k tokensUpdated 18 days ago
    Media & CreativeAuto-check passed
  • Viral Short Form Ideas

    vyralcontent/content-skills

    Generate short-form video ideas at volume and stop the blank-page problem for good.

    134 GitHub starsUsed in 1 repo~2.9k tokens
    Media & CreativeAuto-check passed
  • Viral Tiktok Content

    vyralcontent/content-skills

    Write a tiktok script, a tiktok hook, or a fresh tiktok video idea shaped for how the FYP actually ranks content.

    134 GitHub starsUsed in 1 repo~2.7k tokens
    Media & CreativeAuto-check passed
  • Viral Youtube Shorts

    vyralcontent/content-skills

    Write and diagnose YouTube Shorts that hold attention on the Shorts Feed and route viewers into your long-form.

    134 GitHub starsUsed in 1 repo~3k tokens
    Media & CreativeAuto-check passed
  • Short Publish

    gug007/lpm

    Post a finished vertical lesson from ~/Movies/lpm-lessons/tiktok/<slug/ to YouTube Shorts (LPM channel, through Chrome) and TikTok (@lpm06557, from the user's iPhone through iPhone Mirroring) in…

    152 GitHub stars~3.1k tokensUpdated today
    Media & CreativeAuto-check passed

More from jianshuo/claude-skills

All 38 skills in this repo
  • Wjs Segmenting Video

    jianshuo/claude-skills

    A skill your agent uses when the user has a long-form video (interview / lecture / podcast / conversation) and a transcript SRT, and wants to extract 3–6 stand-alone topical short clips from it.

    131 GitHub stars~3.5k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Uploading Video

    jianshuo/claude-skills

    Upload one or many videos to YouTube. An agent skill from jianshuo/claude-skills.

    131 GitHub stars~2.1k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Converting Wp To Hugo

    jianshuo/claude-skills

    A skill your agent uses when migrating a WordPress site to a Hugo static site on GitHub Pages from a WXR export (.xml) plus the wp-content/uploads folder — preserving /archives/<id/ URLs, localizing…

    131 GitHub stars~1.8k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Burning Subtitles

    jianshuo/claude-skills

    A skill your agent uses when the user has a video + an SRT and wants the subtitles either burned into the pixels (libass, always-visible) or soft-muxed as a togglable track.

    131 GitHub stars~3k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Cleaning Spam

    jianshuo/claude-skills

    A skill your agent uses when the user complains about spam on his X/Twitter posts — 同城面付 / 寻固炮 / 线下上门 / 免费破处 这类引流号在他推文下刷的 emoji 垃圾回复 — and wants them removed.

    131 GitHub stars~532 tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Creating Video Book

    jianshuo/claude-skills

    A skill your agent uses when the user wants a book turned into YouTube chapter videos — 每章用 VoiceDrop 读书的有声书 mp3 做音轨,配 GPT Image 2 画面和中心思想大字,输出 1920×1080 横屏视频发 YouTube。Triggers — "把这本书做成视频"…

    131 GitHub stars~1.8k tokensUpdated 1 mo ago
    Auto-check passed

Works with

Questions about Wjs Reframing Video

What does Wjs Reframing Video do?

A skill your agent uses 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). Wjs Reframing Video is an agent skill from jianshuo/claude-skills. 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).

When should I use Wjs Reframing Video?

Wjs Reframing Video fits situations like: the user wants to convert a video between horizontal and vertical orientations while preserving the inverted aspect ratio (16:9 ↔ 9:16; 做成竖屏发抖音/视频号/小红书; make this vertical for Reels / TikTok / YouTube Shorts; crop to portrait.

How do I install Wjs Reframing Video in Claude Code?

Run `npx skills add jianshuo/claude-skills --skill wjs-reframing-video -a claude-code`. Or copy the skill folder (wjs-reframing-video in jianshuo/claude-skills) into .claude/skills/wjs-reframing-video in your project. Claude Code loads it when a task matches its description.

How do I install Wjs Reframing Video in Codex?

Run `npx skills add jianshuo/claude-skills --skill wjs-reframing-video -a codex`. Or copy the skill folder (wjs-reframing-video in jianshuo/claude-skills) into .agents/skills/wjs-reframing-video in your project. Codex loads it when a task matches its description.

Can I use Wjs Reframing Video in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jianshuo/claude-skills --skill wjs-reframing-video -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wjs-reframing-video, .gemini/skills/wjs-reframing-video, .github/skills/wjs-reframing-video and .opencode/skills/wjs-reframing-video in your project.

What does Wjs Reframing Video need to run?

Going by SKILL.md and its folder, Wjs Reframing Video needs Python for the scripts in its folder and the command-line tools its instructions call (ffmpeg and pip). Our summary lists: Python 3.

Does Wjs Reframing Video access the network?

SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Wjs Reframing Video safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Wjs Reframing Video use?

Wjs Reframing Video is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Wjs Reframing Video use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Wjs Reframing Video?

Skills that share tags, products or a category with Wjs Reframing Video: Viral Captions And Ctas (vyralcontent/content-skills, 134 stars), Shortform Idea Grill (ericosiu/ai-marketing-skills, 3.6k stars), Viral Short Form Ideas (vyralcontent/content-skills, 134 stars) and Viral Tiktok Content (vyralcontent/content-skills, 134 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Wjs Reframing Video?

jianshuo (a GitHub user) maintains it in jianshuo/claude-skills, which has 131 GitHub stars. The repository holds 38 skills in this directory. The repository was last updated on August 20, 2026.

Source: jianshuo/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.