Add screen takeover
add_screen_takeoverPROJECT-SCOPED: this call acts only on the explicit project_id and returns the project identity with its result. PUSH INTO A SCREEN IN THE SHOT AND LET WHAT IS ON IT BECOME THE WHOLE VIDEO — THE tool for 'zoom into the laptop and continue with the other scene', 'make it go into the phone screen', 'transition into the monitor smoothly', and every request that describes the camera travelling INTO a device and the content taking over. It is ONE continuous move, not a zoom plus a cut: the asset is corner-pinned onto the glass so it plays ON the screen inside the shot, the camera pushes in, the picture flattens out of the screen into the full frame, and the clip cuts in on the SAME frame the push ends on — which is why the join cannot be seen. Do NOT build this out of add_zoom + insert_media: an overlay is drawn ABOVE the zoom, so the content sits flat and still while the shot pushes past it, and the cut lands as a jump. at_output_s is where in the FINAL video the takeover FINISHES and the asset is full screen (the push happens in the duration_s before it). The device shot may be the MAIN footage or a SPLICED-IN video clip: point at_output_s inside an inserted clip that shows the device and the push rides that clip's tail, arriving exactly where it ends (I snap there and say so). duration_s 0.4-5, default 1.2 — 1.0-1.5 is the move people mean. I find the corners THREE ways, in order of trust: first I MATCH the content's own pixels against the filmed glass (the laptop was almost always filmed displaying that very recording — a feature homography gives exact corners INCLUDING rotation and keystone, and the pinned clip then grows out of the very pixels it was filmed playing on, living on the glass from the window's start); else I MEASURE a screen-shaped region from the pixels; else I READ the corners with the vision model. When the corners are matched the content is on the glass the whole window; when they are only measured or read, the glass shows what was FILMED until the push is ~half done and the content dissolves on late (a scene switch visible in a wide shot of the room is the #1 thing users call 'not smooth'), fully there before the picture lands. Momentum carries through the cut either way (a brief settle past full frame); ease='accelerate' dives with speed peaking at the cut. Pass corners only to override all of that (8 numbers x0,y0,x1,y1,x2,y2,x3,y3 as FRACTIONS of the frame in the order top-left, top-right, BOTTOM-LEFT, bottom-right — or a {x,y,w,h} rectangle). clip_start_s picks where in the asset the takeover starts playing; hold_s is how long the asset stays full screen afterwards (default: the rest of it). push 0-1 is how far the camera travels (1 = all the way, the default — there is no further zoom past 1; a push that feels weak is usually a short duration_s, so lengthen the move instead). ease: 'smooth' (default), 'accelerate', 'linear'. settle:false turns OFF the through-cut momentum (the brief zoom past full frame after the handoff that settles back) — use it when the user says the video 'keeps zooming after the transition' or 'zooms then returns', or asks for a dead-flat landing. It REFUSES rather than guessing when it cannot measure the screen, and refuses when the screen is under 8% of the frame (the push would be a >12x blowup). TO CHANGE AN EXISTING TAKEOVER (flat landing, different ease/length), call this again at the SAME arrival: it REPLACES that takeover in one write — parameters you omit are inherited, and its accepted pin corners are reused instead of re-measured (pass corners to force a re-measure). remove_screen_takeover is only for taking the transition OUT.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ease | No | ||
| push | No | ||
| hold_s | No | ||
| settle | No | ||
| corners | No | ||
| asset_key | Yes | ||
| duration_s | No | ||
| project_id | Yes | Required immutable scope for this call. Copy the id from list_projects/open_project/project_state; the active-project pointer is never used to guess. | |
| at_output_s | Yes | ||
| clip_start_s | No | ||
| motion_motif | No | Active Blueprint motion motif id this event executes; never 'hold'. |