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
- 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.
- 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.
- 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.
- The measurement, before you place. Call
frame_speakerwith every window you will seat, overlay, cut out, or reframe, in as few calls as the limit allows: each window'sstartandendon the cut, aslug,matte(true only for a cutout), and theslotthe 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 withget_task. Each window in itsresult.windowscarriespresence(skip a seat or an overlay whereseat_okis false and a cutout wherematte_okis false),faceandheadas source fractions, and for the slotobject_position(paste itscssonto the seat'sdata-pip-srcview, or onto the root clip for a full-frame reframe),head_in_slot, andfits. Whenfits.heightis false the slot is wider than the source's aspect allows at that height, soobject-fit: coveris 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 leastfits.min_slot_height. Measure the revised slot before placing it: ifmin_slot_heightdid not fall, the slot is height-bound and only deepening helps, and a slot narrowed untilfits.widthturns false has gone too far. Never deepen the crop instead. For a canvas slot,head_in_slotis 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 everyslugunique across them, and read each call's task. - 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.
- 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 aheadlineoverlay or astatementfull cover (the spoken phrase drawn big), asource-textorphotofull 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.