Installation
Quick start
Upload local media viaPOST /v1/uploads first, then pass the returned source_url below.
API coverage
The project loop is the recommended path for agents:
create → apply_ops → preview
(free, non-billable) → render (the single billable step). AsyncFramelane exposes the same
resources with await.
renders.create, projects.render and projects.create return a job (or project) plus an
advisory ok / violations lint of the composition — RenderSubmitOut and
ProjectCreated. The render is already dispatched and the project already stored when you
read them, so they are a receipt, not a gate; gate on the free
previews.create(render_request=..., dry_run=True) instead. Job reads (renders.get /
list / cancel) return a plain JobOut with no lint.
Iterate every item across all pages with framelane.auto_paginate (or auto_paginate_async):

