Skip to content
Skills Library
Marketing & content · Conversion & formats

reframe

/reframe

Re-frame landscape footage for a vertical (9:16), square or 4:5 film - every shot cropped onto what matters in it (the speaker, the thing that moves, what the shot is about), the crop following a subject that crosses the frame, the footage never re-encoded. Measures each shot first, draws every window on the frames for you to check, and checks the finished film.html against the same rules. Use for a vertical version of a landscape video, Shorts, Reels, TikTok or 抖音 cuts from horizontal footage, a square cut for a feed, or when the person asks to reframe or auto-crop (横屏转竖屏, 竖屏版, 重构图, 自动裁切, 竖版剪

Licence
MIT
Last repository change
07.11.2026

Assessment and security

90/ 100Class: good
Format25 / 25
Frontmatter with name and description, valid name, description up to 1,024 characters, name matching the folder.
Discoverability25 / 25
Description explains when to use the skill, has a reasonable length and uses third person.
Content25 / 35
At least 150 words and at most 500 lines, headings, step lists, examples or code.
Hygiene15 / 15
No placeholders such as TODO, no Windows paths, with a licence.
Riskno signals detected in the scan
Files in this package
4
Scripts
1
HTML comments
0
URLs in SKILL.md
0
Deprecation

No signals detected. Repository changed on 07.11.2026, without references to retired models or APIs.

Licence

MIT, open: use and modify while retaining author attribution.

What to check before installing
  • 1 scripts in this package. Review them before installing, as Claude may execute them.

Scripts: scripts/reframe.mjs

What it does and when to use it

Re-frame landscape footage for a vertical (9:16), square or 4:5 film - every shot cropped onto what matters in it (the speaker, the thing that moves, what the shot is about), the crop following a subject that crosses the frame, the footage never re-encoded. Measures each shot first, draws every window on the frames for you to check, and checks the finished film.html against the same rules. Use for a vertical version of a landscape video, Shorts, Reels, TikTok or 抖音 cuts from horizontal footage, a square cut for a feed, or when the person asks to reframe or auto-crop (横屏转竖屏, 竖屏版, 重构图, 自动裁切, 竖版剪

Original author description

Re-frame landscape footage for a vertical (9:16), square or 4:5 film - every shot cropped onto what matters in it (the speaker, the thing that moves, what the shot is about), the crop following a subject that crosses the frame, the footage never re-encoded. Measures each shot first, draws every window on the frames for you to check, and checks the finished film.html against the same rules. Use for a vertical version of a landscape video, Shorts, Reels, TikTok or 抖音 cuts from horizontal footage, a square cut for a feed, or when the person asks to reframe or auto-crop (横屏转竖屏, 竖屏版, 重构图, 自动裁切, 竖版剪

How it works

  1. What defines it
  2. What has to be true
  3. What you have
  4. With the person
Original SKILL.md headings · 59 lines, 673 words
SKILL.md preview
---
name: reframe
description: Re-frame landscape footage for a vertical (9:16), square or 4:5 film - every shot cropped onto what matters in it (the speaker, the thing that moves, what the shot is about), the crop following a subject that crosses the frame, the footage never re-encoded. Measures each shot first, draws every window on the frames for you to check, and checks the finished film.html against the same rules. Use for a vertical version of a landscape video, Shorts, Reels, TikTok or 抖音 cuts from horizontal footage, a square cut for a feed, or when the person asks to reframe or auto-crop (横屏转竖屏, 竖屏版, 重构图, 自动裁切, 竖版剪辑, reframe, auto reframe, 9:16).
---

# Reframe

The person's landscape footage as a vertical or square film that looks shot for that shape: at every moment the
viewer sees what the shot is about, never the wall beside it, never half a face.

## What defines it

Each shot is framed on its own content. One centre crop for the whole video is not this, however tidy, and neither
is the whole landscape frame shrunk between blurred bars.

## What has to be true

- **Measured, then looked at.** Every window comes from the measure and from your own eyes on its pictures. The
  measure can be wrong; the pictures decide.
- **The subject stays whole.** Faces, the speaker, the moving thing and words that matter stay inside the frame with
  room around them. When two things matter and both do not fit, the frame goes to the one the moment is about (who
  speaks, what moves, what the narration names), and the person hears what was left out.
- **Calm framing.** A still subject gets one still window for the shot. The window moves only when the subject does:
  a hard reposition at least a second after the last one, or a smooth follow; never a crop that drifts or jitters.
- **Their footage as it is.** The same file trimmed with `#t=` and cropped by the clip's own CSS (`object-fit: cover`
  with an `object-position`, or a box of the footage's shape moved by `translate`); never re-encoded, cropped into a
  new file, or changed in speed. Clips of one shot meet frame to frame, so the shot's sound runs on unbroken.

## What you have

`node <this skill's folder>/scripts/reframe.mjs <video> --aspect 9:16 --src assets/<file>` (in the film's folder)
writes `reframe/<name>.json`, a review page and `reframe/<name>-sheet.jpg`. It finds the shots, weighs motion (the
camera's own move taken out), detail, colour contrast and skin tones ten times a second, and gives each shot a
`fixed` window (one clip), a `split` (several clips of the same file, each at least a second, each with its own
position) or `whole` (the footage's own shape), with ready `<video>` lines at their own source seconds.

**Read every sheet it prints (`look: … (Read it)`).** Each picture is a moment (each clip's start, its weakest
moment marked WEAKEST, one every 1.5 s): the frame with the window outlined and the outside dimmed, a ruler in % of
the frame, and the crop as the film shows it. Where the subject is outside the window or cut by it, set
`object-position` yourself; the output gives the formula. `held` is how often the window agrees with the measure, not
proof the subject is in it. Lines marked `!` say where to look hardest.

**A smooth follow** (`--follow`): `@keyframes follow-N` of `translate` for a split shot's path and the one `<video>`
clip that wears them, also in `reframe/<name>-follow.css`. Put the keyframes in film.html's `<style>`. The animation
runs on the clip's own time from its `at`: a clip trimmed to start `a` seconds after the shot's start takes
`animation-delay: -a s`. The clip keeps its own sound.

**Trimming a shot** keeps only the clips inside the new `#t=`, the outer two cut to it, positions unchanged.

**The film as written:** `node <this skill's folder>/scripts/reframe.mjs check` in the film's folder reads
film.html's own crops and prints each window, how long it moves, each reposition, the moments where the window keeps
least of what the measure found, and draws them in a sheet. It lists with `!` what breaks the rules above. Fix every
`!` and run it again.

The film's shape is its viewport (`<meta name="viewport" content="width=1080, height=1920">`). `npx openfilm look`
shows the cut film.

## With the person

What they ask for comes first: the shape (9:16 when they say vertical), the shots that must be in it, anything that
must stay in frame (a product, a logo, a second speaker). Ask without holding up the work. When done, say per shot:
`held`, every `!` line, each window you moved and why, and what the crop left out.
Files in this package (4)
  • SKILL.md 5 KB
  • cover.jpg 54 KB
  • openfilm.json 5 KB
  • scripts/reframe.mjs 81 KB

Versions

RepositoryScoreLicence
This page · WEBGRS/openfilm-reframe90MIT
ramboz/jig100MIT
ramboz/jig100MIT
ramboz/jig100MIT
kiyeonjeon21/reframe100MIT
Hendrixer/Direction-app82MIT
saadshahd/moo.md82MIT

Database snapshot: 13.11.2026 · package version 05c08dc37ac8 (SHA-256 digest of the entire package)

Downloads in the last 30 days: 0 · ranking

Report a problem with this skill: harmful content, incorrect descriptions or an author’s removal request.

Similar skills

  • 90video-social-reframe
    Use when the task is to reframe landscape footage for vertical and square outputs without losing subjects.
  • 100footage-reframing
    Put the user's own footage in a frame of another shape - landscape to a vertical reel, say - with the camera on the right person - measured once per source, checked and corrected by hand where the tool fails (a subject cut off, the wrong speaker, a late or jittery camera), then…
  • 100reframe-social
    Reframe a video to a different aspect ratio for social platforms — vertical 9:16 (Reels/Shorts/TikTok), square 1:1, or 4:5 portrait — from horizontal source. Use whenever the user wants to make a video vertical/square, fit it for Instagram/TikTok/YouTube Shorts, repurpose a 16:9…
  • 95video-perception
    Analyze what a video clip's pixels show and reframe horizontal footage for vertical output. Use when working with perception.json, shot type, scene type, camera motion, exposure, on-screen text, saliency, subject tracking, auto-reframe, 9:16 conversion, or when configuring a…
  • 90make-vertical-cut
    Reframe a landscape video into a 9:16 vertical cut for social and mobile - recompose every scene around the action area and turn captions on for sound-off viewing. Use when the user says "make a vertical version", "reframe this for Reels/Shorts/TikTok", "9:16 cut of this video",…
  • 100footage-reframing
    Put the user's own footage in a frame of another shape - landscape to a vertical reel, say - with the camera following the person, measured once per source, and cut it into a reel of clips back to back with scripts/reel_cut.py, so any re-cut is free. Covers which clips follow…

Feedback and reports

Your message goes to Bartosz Sokoliński. An email address is needed only for a reply. See the privacy policy.