aip-framing

Installation
SKILL.md

Framing for an AI Producer project

Framing decides who owns the frame for each beat: the speaker, the footage, or the canvas. It is one decision per beat, made from the canvas, the transcript, and the footage, and it is yours. How anything looks (color, corners, shadows, type) is the visual style's; this page owns each layout's forms and the geometry it must keep. The composition contract owns what the editor and the export read.

Apply the user's brief and the AI Producer text rules before choosing a form that contains text. The forms below describe geometry; their label, headline, and statement examples do not authorize extra copy.

What you decide

  1. The canvas, first. Read it from the brief's platform: 1080x1920 for Reels, TikTok, and Shorts; 1080x1080 for square feed posts; otherwise the source aspect, usually 1920x1080. The canvas decides which forms and positions each layout has (tables below); a layout drawn for one canvas is not reused on another.
  2. The register, per beat. One of the four in the table below; its chapter owns the forms, the positions its canvas allows, what it keeps, and how it is built.
  3. The form, per moment. Seat, overlay, and full cover each offer a short menu of forms in their chapters below. Name the register and the form in the plan.
  4. The measurement, before you place. Call frame_speaker with every window you will seat, overlay, cut out, or reframe, in as few calls as the limit allows: each window's start and end on the cut, a slug, matte (true only for a cutout), and the slot the speaker will occupy (the seat's rect, a circle's side twice, an aperture's hole, or the canvas for an overlay, a full-frame reframe, and a cutout). Read the task with get_task. Each window in its result.windows carries presence (skip a seat or an overlay where seat_ok is false and a cutout where matte_ok is false), face and head as source fractions, and for the slot object_position (paste its css onto the seat's data-pip-src view, or onto the root clip for a full-frame reframe), head_in_slot, and fits. When fits.height is false the slot is wider than the source's aspect allows at that height, so object-fit: cover is scaling the source to the slot's width and the head is drawn at that width: narrow the slot at the same height and the head shrinks with it, or give it at least fits.min_slot_height. Measure the revised slot before placing it: if min_slot_height did not fall, the slot is height-bound and only deepening helps, and a slot narrowed until fits.width turns false has gone too far. Never deepen the crop instead. For a canvas slot, head_in_slot is the head's box on the canvas, the area an overlay keeps clear. A cutout window takes and returns more; the cutout reference owns those fields. The call is free and takes at most 8 windows, with matte windows totalling at most 60 s a call; when the plan has more, split the windows across calls, keep every slug unique across them, and read each call's task.
  5. The windows. A register that shows the speaker is legal only over a window where the speaker is on camera. When the source cuts away to something the creator chose to show, let it play raw rather than covering it.
  6. The caption band, per moment. Captions stay on during a visual moment: the moment gives way to the band, not the reverse. Decide where the band sits for each moment from its layout chapter below (Where the caption sits), and place the caption cues that play during that moment there, as the dynamic caption skill says, in a dark type only where the ground under the band is one the composition painted light. Leave the captions out under a moment only for a headline overlay or a statement full cover (the spoken phrase drawn big), a source-text or photo full cover whose relevant detail must occupy the band and cannot move, or a stretch the brief wants silent. Each cue takes its own position, so one video holds a PIP and a full cover at once.

Registers

Installs
72
GitHub Stars
6
First Seen
8 days ago