> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eversince.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# auto reframe

> Choose what a clip shows when its picture does not match the box it fills (a 16:9 shot on a 9:16 timeline is centre-cropped by default). view shows one named area of the source, zoomed or not, for the whole clip. Otherwise the crop follows the person, or the largest thing in shot with subject any, cutting rather than panning; two people hold on the larger, or with follow speaker cut to whoever is talking (needs speakers on the recording). A picture that fits, or with nobody found, stays centred and says so. A clip whose subject has not been read yet is read in the background: the answer carries job_id, and the crop lands on the timeline when it finishes (get_jobs). Writes the focus track only, so a punch-in and a camera move stack on it. Reading a subject: cloud processing.



## OpenAPI

````yaml /openapi.json post /tools/auto_reframe
openapi: 3.1.0
info:
  title: Eversince API
  version: '1'
  description: >-
    Every Eversince tool as one POST call, plus the routes beside them: the tool
    list, account and keys, uploads, webhooks and models. The prose is at
    https://docs.eversince.ai.
servers:
  - url: https://eversince.ai/api/v1
security:
  - bearer: []
tags:
  - name: Discovery
    description: The tool list, the same on the MCP server, the REST API and the CLI.
  - name: Workspace
    description: Jobs, balances, settings, templates, skills and the overview.
  - name: Library
    description: >-
      Items, search, import, reading media, comments, boards, calendars, the
      brand kit and public links.
  - name: Timeline
    description: 'Video editing: timelines, clips, captions, sound, language and rendering.'
  - name: Canvas
    description: 'Still editing: canvases, slides, layers and rendering.'
  - name: Generation
    description: Image, video and audio generation, upscaling, cutouts and models.
  - name: Research
    description: 'What platforms publish: pulling and keeping posts.'
  - name: Account
    description: Balances, keys, workspaces and script sessions.
  - name: Uploads
    description: Files into the library by presigned upload or by URL.
  - name: Webhooks
    description: Job results posted to a URL as they complete.
  - name: Models
    description: Generation models and cost estimates.
paths:
  /tools/auto_reframe:
    post:
      tags:
        - Timeline
      summary: auto reframe
      description: >-
        Choose what a clip shows when its picture does not match the box it
        fills (a 16:9 shot on a 9:16 timeline is centre-cropped by default).
        view shows one named area of the source, zoomed or not, for the whole
        clip. Otherwise the crop follows the person, or the largest thing in
        shot with subject any, cutting rather than panning; two people hold on
        the larger, or with follow speaker cut to whoever is talking (needs
        speakers on the recording). A picture that fits, or with nobody found,
        stays centred and says so. A clip whose subject has not been read yet is
        read in the background: the answer carries job_id, and the crop lands on
        the timeline when it finishes (get_jobs). Writes the focus track only,
        so a punch-in and a camera move stack on it. Reading a subject: cloud
        processing.
      operationId: auto_reframe
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/WorkspaceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                timeline_id:
                  type: string
                  description: The timeline id.
                clip_id:
                  description: >-
                    The video clip to reframe. Absent: every video clip on the
                    timeline.
                  type: string
                view:
                  description: >-
                    Show one area of the source for the whole clip: its centre
                    as fractions of the source (x 0 left, y 0 top) and, to zoom,
                    its width as a fraction of the source width; no width shows
                    as much as the box holds. Kept inside the picture, up to 5x.
                    Needs clip_id (video or image). Replaces the clip's scale,
                    pan and focus track.
                  type: object
                  properties:
                    x:
                      type: number
                      minimum: 0
                      maximum: 1
                    'y':
                      type: number
                      minimum: 0
                      maximum: 1
                    width:
                      type: number
                      exclusiveMinimum: 0
                      maximum: 1
                  required:
                    - x
                    - 'y'
                subject:
                  description: >-
                    What the crop follows: people (default; a person's head is
                    what it aims at), or any subject, the largest thing detected
                    when no person is in shot.
                  type: string
                  enum:
                    - person
                    - any
                follow:
                  description: >-
                    Where two people share the frame: speaker cuts the crop to
                    whoever is talking, from a speaking-face read at a dozen of
                    each voice's turns, once per recording. Needs speakers on
                    the recording; where it cannot tell, the crop stays centred
                    and says so. Default holds both.
                  type: string
                  enum:
                    - subject
                    - speaker
                if_revision:
                  description: >-
                    The revision get_timeline returned. A stale one fails with
                    revision_conflict instead of applying; so does no revision
                    once a user edited the timeline in the app since this
                    connection last read it.
                  anyOf:
                    - type: string
                    - type: integer
                context:
                  description: 'Optional: one sentence shown to the user beside this action.'
                  type: string
                  maxLength: 600
              required:
                - timeline_id
      responses:
        '200':
          description: >-
            Done, or a job started for work that runs longer (follow it with
            get_jobs).
          content:
            application/json:
              schema:
                type: object
                required:
                  - ok
                  - data
                  - meta
                properties:
                  ok:
                    const: true
                  data:
                    type: object
                    additionalProperties: true
                  meta:
                    type: object
                    properties:
                      request_id:
                        type: string
                      cost:
                        $ref: '#/components/schemas/Cost'
                      cloud_processing:
                        $ref: '#/components/schemas/CloudProcessing'
                  media:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        default:
          $ref: '#/components/responses/Error'
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      schema:
        type: string
      description: >-
        Retry a paid dispatch safely: the same key returns the job already
        dispatched instead of charging again.
    WorkspaceId:
      name: x-workspace-id
      in: header
      required: false
      schema:
        type: string
      description: The workspace this one call acts in, when it is not the key's own.
  schemas:
    Cost:
      type: object
      description: AI credits the call cost.
      additionalProperties: true
    CloudProcessing:
      type: object
      description: Cloud processing the call used, and what is left.
      properties:
        ran_on:
          const: cloud
        minutes:
          type: number
        queued_minutes:
          type: number
        left_minutes:
          type: number
        bought_minutes:
          type: number
        note:
          type: string
    Error:
      type: object
      required:
        - ok
        - error
      properties:
        ok:
          const: false
        error:
          type: object
          required:
            - code
            - message
            - retryable
          properties:
            code:
              type: string
            message:
              type: string
              description: What went wrong, in words to act on.
            retryable:
              type: boolean
            suggested_action:
              type: string
              description: The next step that works.
            cloud_processing:
              $ref: '#/components/schemas/CloudProcessing'
  responses:
    Error:
      description: The call was refused or failed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: >-
        An API key (es_live_…) from Settings, under API keys, or an OAuth access
        token.

````