Propose surfaces to put things on
propose_surfacesFind flat surfaces to put something on, in a video or an image: a sign, a screen, a poster, a wall. Each proposal has an id, its four corners at the seed frame in source, film and film_norm, its true width over height when the perspective shows it, how well it is outlined and how trackable it is (edges or features), and, for a video, followed by a tracker over the whole range: the range where all of it stays in the frame, and the stretches where it is lost (not found near where it was). What passes in front of it is for track_occluders on the track. A sheet shows the proposals numbered on the seed frame. Then track the one you pick with track_plane({fromProposal:"sf_...", ...}): its corners and seed time come from the proposal. With query, the surface is looked for inside the boxes find_objects draws for those words; without, the best outlined flat shapes win. Example: propose_surfaces({assetId:"vid_street", clipId:null, query:"blank sign", at:{seconds:null, atSpace:null}, startSeconds:null, endSeconds:null, maxResults:null, detail:null}). It reads up to 19 frames and takes a few seconds. It uses no credits. Proposals last a day.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| at | Yes | The seed frame. seconds null: the best of three frames across the range. | |
| query | Yes | What surface to find, in a few words: "blank sign", "billboard", "laptop screen", "phone screen", "poster", "wall", "table top". null proposes the flattest, best outlined surfaces it sees. | |
| clipId | Yes | A clip: looks at its asset over the part the clip plays, and maps the surfaces to the film. Else null. | |
| detail | Yes | How much the answer says: brief is one line per result with its ids; normal (null) adds the transform; full adds every matrix of the chain. | |
| assetId | Yes | The video or image to look at. null with clipId reads the clip's asset. | |
| projectId | Yes | The project this call runs on without changing the open project. null (or leaving it out) uses the open project. wait_for_jobs takes the projectId of the calls that started the jobs. | |
| endSeconds | Yes | End of that range. null: the end of the clip, or of the asset. | |
| maxResults | Yes | Surfaces to propose, 1 to 10. null: 5. | |
| startSeconds | Yes | Start of the range to follow the surfaces over, in at.atSpace seconds. null: the start of the clip, or of the asset. |