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

# Tighten

> Give a long raw take back SHORTER.

Give a long raw take back SHORTER. Pre-roll, false starts, restarts, take-fumbles and dead air come out; the argument, the voice and the natural rhythm stay in. NOTHING is composited, reframed, restyled, captioned or added: this register ONLY EVER REMOVES TIME, which is why it takes any orientation and hands back the source's own frame.

## See it

**2:45 → 2:25** one take, tightened  ·  **20.9s** removed  ·  **13%** shorter

<Tabs>
  <Tab title="Output">
    <video controls muted loop playsinline preload="metadata" width="100%" poster="https://d7qhwxmzzmnbz.cloudfront.net/builtin-skills/tighten/example-poster-v1.jpg" src="https://d7qhwxmzzmnbz.cloudfront.net/builtin-skills/tighten/example-v1.mp4" />

    Both takes in full, so the player’s own scrubber carries the result: 2:45 on your input, 2:25 on the cut. The frames are deliberately unchanged — same room, same framing, same 1920x1080 — because tighten never recomposes. Only time came out.
  </Tab>

  <Tab title="Your input video">
    <video controls muted loop playsinline preload="metadata" width="100%" poster="https://d7qhwxmzzmnbz.cloudfront.net/builtin-skills/tighten/source-poster-v1.jpg" src="https://d7qhwxmzzmnbz.cloudfront.net/builtin-skills/tighten/source-v1.mp4" />
  </Tab>

  <Tab title="Side by side">
    <Columns cols={2}>
      <Frame caption="Your input video">
        <video controls muted loop playsinline preload="metadata" style={{width:"100%",aspectRatio:"16 / 9",objectFit:"contain",background:"rgba(127,127,127,0.10)",borderRadius:"6px"}} poster="https://d7qhwxmzzmnbz.cloudfront.net/builtin-skills/tighten/source-poster-v1.jpg" src="https://d7qhwxmzzmnbz.cloudfront.net/builtin-skills/tighten/source-v1.mp4" />
      </Frame>

      <Frame caption="Output">
        <video controls muted loop playsinline preload="metadata" style={{width:"100%",aspectRatio:"16 / 9",objectFit:"contain",background:"rgba(127,127,127,0.10)",borderRadius:"6px"}} poster="https://d7qhwxmzzmnbz.cloudfront.net/builtin-skills/tighten/example-poster-v1.jpg" src="https://d7qhwxmzzmnbz.cloudfront.net/builtin-skills/tighten/example-v1.mp4" />
      </Frame>
    </Columns>
  </Tab>
</Tabs>

### What came out

<div style={{border:"1px solid rgba(127,127,127,0.25)",borderRadius:"8px",padding:"1rem 1.25rem",lineHeight:"2",fontSize:"0.95rem"}}>
  <span>right, pretty much before the AI storm of LLMs. So five years ago, it's 2026, it was probably just in 2021 or like late,</span>
  <span style={{background:"rgba(229,72,77,0.12)",color:"#e5484d",textDecoration:"line-through",textDecorationThickness:"1px",borderRadius:"3px",padding:"0.1em 0.25em"}} title="filler">uh,</span>
  <span>around '21, '22, just before,</span>
  <span style={{background:"rgba(229,72,77,0.12)",color:"#e5484d",textDecoration:"line-through",textDecorationThickness:"1px",borderRadius:"3px",padding:"0.1em 0.25em"}} title="filler">uh,</span>
  <span>the real LLMs start coming up into the mainstream of where we are right now. And ever since that, there's been a lot of changes in all industries from, of course, software engineering to just even normal day productivity of working with Excel also. Before you would have learned how to do things,</span>
  <span style={{background:"rgba(229,72,77,0.12)",color:"#e5484d",textDecoration:"line-through",textDecorationThickness:"1px",borderRadius:"3px",padding:"0.1em 0.25em"}} title="filler">um,</span>
  <span>and understand the actual Excel macro spreadsheets even like that. That's been updated. Now, where we are now, fast-forward five years, what we've been up to? Well, there's been a lot that has been,</span>
  <span style={{background:"rgba(229,72,77,0.12)",color:"#e5484d",textDecoration:"line-through",textDecorationThickness:"1px",borderRadius:"3px",padding:"0.1em 0.25em"}} title="filler">uh,</span>
  <span>happening behind the scenes, of course.</span>
  <span style={{background:"rgba(229,72,77,0.12)",color:"#e5484d",textDecoration:"line-through",textDecorationThickness:"1px",borderRadius:"3px",padding:"0.1em 0.25em"}} title="filler">Um,</span>
  <span>and where we are right</span>
  <span style={{background:"rgba(229,72,77,0.12)",color:"#e5484d",textDecoration:"line-through",textDecorationThickness:"1px",borderRadius:"3px",padding:"0.1em 0.25em"}} title="restart or stutter">now--</span>
  <span>In fact, I just wanna go straight into it. Long story short,</span>
  <span style={{background:"rgba(229,72,77,0.12)",color:"#e5484d",textDecoration:"line-through",textDecorationThickness:"1px",borderRadius:"3px",padding:"0.1em 0.25em"}} title="restart or stutter">we-- Uh,</span>
  <span>the thing before</span>
</div>

<span style={{color:"#e5484d"}}>■</span> removed — fillers, false starts, restarts and dead air. Everything else is the take's own words, in its own order: tighten never rewrites, it only leaves things out.

## Material

One recording of someone talking, UP TO 20 MINUTES. Any orientation, any resolution: the cut is a splice, so the output keeps the source's own dimensions. The only real requirement is intelligible speech, because the cut is decided from the words.

## Spec

| Field           | Type   | Required | Description                                                                                                                            |
| --------------- | ------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `targetSeconds` | number | no       | Leave unset to let the take decide. Setting it asks the director to REACH a length, which means dropping content and not just fumbles. |
| `maxSeconds`    | number | no       | Cap on the finished cut, default 1200 (20 min).                                                                                        |

## Pricing & timing

|              |                                                                                 |
| ------------ | ------------------------------------------------------------------------------- |
| **Delivery** | **File** — an mp4 at `outputUrl`, plus an editable canvas                       |
| Price        | 200 credits: [estimate](/docs/setting-up/jobs-and-polling) is free and authoritative |
| Typical run  | \~60s                                                                           |
| Review gate  | No: runs straight through                                                       |

## Refusals this template can return

* `NO_USABLE_SPANS`
* `SPAN_TOO_LONG`
* `UNREADABLE`

Refusals are free and typed: see [Refusals](/docs/setting-up/refusals).

## Run it

<Tabs>
  <Tab title="curl (REST)">
    ```bash theme={null}
    # 1. mint an upload ticket, then put the file against it
    curl -X POST https://api.askeditor.com/v1/uploads \
      -H "Authorization: Bearer $ASKEDITOR_API_KEY" \
      -H "Content-Type: application/json" -d '{"purpose":"tighten"}'
    # → { "ticket": "upl_…", "uploadUrl": "…" }

    curl -X POST https://api.askeditor.com/v1/uploads/{ticket}/file \
      -F "file=@./recording.mp4"
    # → { "material": "mat_…" }

    # 2. submit the run
    curl -X POST https://api.askeditor.com/api/talking-head-cut/jobs \
      -H "Authorization: Bearer $ASKEDITOR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{ "material": "mat_…", "clientRequestId": "your-own-id" }'
    # → { "jobId": "…", "envelopeId": "tighten:…", "credits": { "quoted": 200, "charged": 0 } }

    # 3. poll until it resolves
    curl https://api.askeditor.com/v1/jobs/{envelopeId} \
      -H "Authorization: Bearer $ASKEDITOR_API_KEY"
    ```

    `clientRequestId` is **required**: reuse the same value on a retry and you
    cannot be charged twice for the same run.
  </Tab>

  <Tab title="Agent (MCP)">
    Connected via the [MCP connector](/docs/mcp/connect)? It is one sentence:

    > "Run the **Tighten** template on \~/Desktop/recording.mp4"

    The agent lists the menu, estimates (free), asks your consent, uploads, runs,
    and polls [`GET /v1/jobs/{id}`](/docs/setting-up/jobs-and-polling) to the finished
    envelope.
  </Tab>
</Tabs>

**Editable delivery:** Delivers as PARTS: one clip per kept span, each a trim of your ORIGINAL recording. A cut you disagree with costs a drag instead of a re-run, and everything plays at master quality.
