Hypernatural

WorkflowBy HypernaturalVersion 3, Oct 29, 2026

recipe-reframe-vertical

Turn a finished 16:9 spot into a 9:16 vertical version for TikTok, Reels or Shorts: crop every shot first, restage and re-animate only the shots a crop loses a story beat in, then splice them back over the source audio. Works on an original cut or a remake from recipe-shot-for-shot.

SKILL.md

Reframe a spot to vertical

The person brings a finished 16:9 cut (an original, or a variant from recipe-shot-for-shot) and, if it has one, the job that made it. You deliver the 9:16 cut over the source audio and every shot as its own file, in the layout agreed in AGENTS.md (core skill).

Cheapest first: crop everything, watch the whole vertical cut, and only then spend generation on the shots that fail. Most shots survive a crop.

Steps

  1. Crop every shot (guide-prepare-renders-for-delivery, ffmpeg-crop-to-vertical). Take the shot list from the 16:9 job or find it with ffmpeg-scene-cuts; together the shots must cover the whole video. For each shot, look at a contact sheet of 4 frames with a vertical grid and place a 608×1080 window (from 1080p). Follow the subject and the action across the whole shot, not the first frame; pan the window across a shot when the action moves; fit and pad end cards and graphics wider than the window. Write each window and why in the Log of AGENTS.md. Build the crop-only cut over the source audio and a sheet of every shot's first, middle and last frame. Gate: the person watches the whole crop-only cut at native size and names the shots that need more than a crop.
  2. Restage only the shots a crop can't save (guide-edit-a-frame-before-animating, nano-banana-restage-for-new-aspect). Write per shot what moves and what stays. Make both kinds, on nano banana 2.1 and Pro:
    • a 16:9 edit with the subjects moved into the middle third, judged by its centred 9:16 crop: for close-ups, and when the look must match the cropped shots around it;
    • a native 9:16 redraw, the same camera "shot in portrait": more resolution for the render and better for wides, but the model recomposes more freely. Gate: a 9:16 review page per shot: the original 16:9 frame, the plain crop as a reference, each 16:9 edit shown as its crop with a flip to the full frame, and the redraws. Check every person in a redraw: they sometimes duplicate a background person or bunch two on one side.
  3. Fix held props on the pick (guide-keep-small-details, nano-banana-swap-held-product): Pro, a pre-hazed product photo for the design, a crop of the source frame's prop for angle and grip. Redraws lose small logos; judge the logo at playback size. Gate: review the fixed stills.
  4. Animate the restaged shots (guide-animate-a-shot). Use the model that won the shot in the 16:9 job (kling-v3-image-to-video, seedance-2-5-image-to-video). With no earlier job, draft on h3-max-image-to-video and upgrade where guide-choose-a-video-model says the shot needs it; a draft approves composition and timing, not motion. Trim to the shot's length plus a 0.5 s tail (ffmpeg-frame-exact-trim) and keep the render's own audio in the trimmed file, so a take is judged with its sound. Crop a 16:9 render to 9:16; if the crop holds only a sliver of someone, move the crop centre and lock the camera in the prompt, or a push-in drifts them out. Gate: the renders as a 9:16 row with the plain-crop clip as the reference.
  5. Lip-sync the dialogue shots (guide-lipsync-video, h3-max-lipsync-a-still). Isolate the voice (elevenlabs-voice-isolation) and cut the line to start on the shot's first frame and go silent after the speaker's last word, picked by ear from a ladder of trims (ffmpeg-cut-audio-window). Pad it with silence to 5 s; never take a longer window. It is a fresh performance from the restaged still. Gate: unmuted, next to the plain render: H3 smooths facial hair and skin on a close-up, so pick the lip sync only if it holds up.
  6. Splice (ffmpeg-splice-into-source-cut): each picked render replaces its shot at exactly the shot's length (the tail dropped), over the source audio. Count the frames after every cut (ffmpeg-frame-exact-trim).
  7. Deliver (core skill), shaped like the 16:9 job's delivery: the cut, plus shotNN.mp4 and shotNN_noaudio.mp4 for every shot. A restaged shot is the picked render with its 0.5 s tail and its own audio; a cropped shot is the crop at exactly the shot's length with the source audio, since the source cuts straight to the next shot.

Resolution: the vertical ships at 608×1080, the pixels the source has. Where the client needs full 1080×1920 quality, restage those shots and render them natively at 1080p 9:16 with Seedance; don't put Topaz on the crops.

Choices this recipe makes

  • Restage only when the crop loses a story beat: a second character, an interaction, the product. Not for empty space or a slightly tight frame.
  • Background people: ask for a glimpse at the frame edges. "Move them close behind her" crowds the subject.
  • Re-animate with the model that already won the shot, so the vertical matches the 16:9 version's motion.
  • Shot files carry a 0.5 s tail so a word finishing over the next shot is still in the file; the cut always uses the exact shot length.

Dead ends

  • Encoding a trimmed segment without an output frame rate: ffmpeg 7 dropped its last frame (25 in, 24 out). Put -r on the output.
  • fps= inside per-segment filter chains before a concat: one frame lost per shot (472 of 484).
  • Asking Seedance image-to-video for an aspect ratio or a seed: it takes neither; the aspect comes from the image.

Worked example

Acme Co.'s office spot, variant A (the original): 12 shots at 1920×1080, 24 fps, 484 frames. 10 shots shipped as crops. Two were restaged: shot 03 (the manager leaning in with his line) as a 16:9 edit judged by its crop, then lip-synced on H3 Max from the picked still; shot 09 (the wide office chaos) as a native 9:16 redraw plus a fix of the client's drink tumbler, whose logo the redraw had lost.

Go make something cool.

Install the app, open your agent, describe the video. That's the whole onboarding.

Sticker HypernaturalSticker BannerSticker TVBoy