# Skill: effect/clones — "שכפול — כמה אני בסרטון" (Clones — several of me)

Copies of the speaker, cut out and standing behind him — up to 5 of you in one frame. Or the classic shot: film 2–5 takes from a tripod, standing somewhere else each time, and they become one.
עותקים של הדובר, חתוכים ועומדים מאחוריו — עד 5 ממך בפריים אחד. או השוט הקלאסי: צלמו 2–5 טייקים מחצובה, כל פעם במקום אחר בפריים, והם מתחברים לשוט אחד.

Category: Layouts · פריסות מסך · a real preview: https://media.gpt.org.il/lookbook/effects/clones-v1.mp4?v=mv19exzc
Price: **60 credits per finished minute**: the render itself — 1 credit per second of 1080p output, **+ 285 a minute for the time the effect is on screen** — a heavy effect: it adds 4.75× a plain render second per second (measured). Combined with captions, a hook or other effects: still one render, nothing more for combining.

## How it works

- **one_take** (default): any talking-head video. The speaker is cut out with a person matte (MediaPipe selfie
  segmentation, on our servers) and copies of them stand behind them — `layout`: `sides` (left and right, as in a
  classic clone reel), `row`, `grid` (two rows) or `trail` (a motion echo). Each copy plays an earlier moment
  (`offset_s`), the same moment (`timing: "same"`) or a held pose (`timing: "freeze"`), and appears with
  `entrance`: materialize (a white-blue glow that settles, as in the reference), pop, slide or fade. The speaker in
  front is untouched.
- **multi_take**: the classic clone shot. Film 2–5 takes from a tripod (the camera must not move, between or during the takes), standing somewhere else in the frame each time, in the same light and about the same length — then send them all. Send take 1 as `video_url` and the others in
  `params.takes`. The engine builds a clean background plate, cuts each person out of their own take and puts
  everyone in one frame, each playing their own take; `length`, `shorter` (freeze / loop / hide), `starts`
  (line the takes up) and `audio` (a take's number, or `mix`). A camera that moved is refused with
  "צריך מצלמה על חצובה, בלי תזוזה" (nothing charged). Its effect seconds count per take, at 0.6 of a
  one-take second each (measured: a take is matted and composited, without the copies' extra work).
- Up to 60 s of clones per render (multi take: 120 s of takes together). The person's cut-out is kept for 24 hours, so a second render of the same stretch does not cut it out again.
- Best with one person, filmed from the waist or chest up, separated from the background. Very fast hand movement
  can leave the fingertips soft; a chair's headrest right next to the head is removed by a second model.


Base URL: `https://apihub.co.il` · Auth: `Authorization: Bearer <API key>` · Docs: `/docs` (group "Video Effects")
Send `X-Tag: <job name>` on every call of one video; `GET /v1/usage?tag=<job name>` returns what it cost.
**Files are kept 24 hours** — download the finished video.

---

## 1. On its own — one call

```jsonc
POST /v1/effects/clones             // x-wait-ms: 110000
{
  "video_url": "https://media.gpt.org.il/samples/sample-he.mp4",
  "start": 0.4,
  "duration": 7.4,
  "params": {
    "count": 4
  }
}
```

A normal render: `status: processing` → poll `GET /v1/executions/{id}` until `completed`, then read `output.url`.

When it plays: the whole video, or a stretch: `start` + `duration`, `at` + `duration`, or `during`.

## 2. With captions, a hook and other effects — the same render

```jsonc
POST /v1/studio/edit               // x-wait-ms: 110000
{
  "video_url": "<the video>",
  "language_code": "he",
  "captions": {
    "style": "classic"
  },
  "effects": [
    {
      "id": "clones",
      "params": {
        "count": 4
      },
      "start": 0.4,
      "duration": 7.4
    }
  ],
  "audio": {
    "normalize": true
  },
  "output": {
    "aspect_ratio": "9:16",
    "resolution": "1080",
    "fit": "crop",
    "quality": "high"
  }
}
```

`effects` is a list: add more entries for more effects. The engine applies them by pipeline stage (cuts and time →
camera → grade and looks → overlays → text and captions → sound), never by their order in the list. An edit has one
`transition`, one `color` grade, one `music` bed, one `speed` and one caption style: two effects that set the same
one are refused with a message that names them.

## 3. Params

| param | default | range / options | what it does |
|---|---|---|---|
| `mode` | `"one_take"` | `one_take` · `multi_take` | one_take = copies cut out of this one video (any talking head) · multi_take = 2–5 takes filmed from a tripod, the person somewhere else in each (send the other takes in `takes`) |
| `count` | `4` | 2–5 | People in the frame, the speaker included (one_take: 4 = the speaker + 3 copies). multi_take: the takes decide it |
| `layout` | `"auto"` | `auto` · `sides` · `row` · `grid` · `trail` · `as_filmed` | one_take: sides (behind the speaker, left and right — the reference) · row (a row behind, heads peeking) · grid (two rows behind) · trail (a motion echo of the person only) · auto = sides. multi_take: as_filmed (everyone where they stood) = auto |
| `timing` | `"offset"` | `offset` · `same` · `freeze` | offset = each copy plays an earlier moment (so they never move together) · same = all move with the speaker · freeze = each copy holds a pose from an earlier moment |
| `offset_s` | `0.7` | 0–4 | offset / freeze: each copy this many seconds behind the one before (0.7 → 0.7, 1.4, 2.1 s); trail: a fifth of it |
| `offsets` | — | list | Each copy's own delay in seconds, nearest first (overrides offset_s) |
| `entrance` | `"materialize"` | `materialize` · `pop` · `slide` · `fade` · `none` | How each copy appears: materialize (a white-blue glowing silhouette that settles, as in the reference) · pop (springs up) · slide (in from its side) · fade · none |
| `enter_ms` | `260` | 0–1500 | How long one copy's entrance takes, ms |
| `stagger_ms` | `320` | 0–3000 | The copies appear one after another, this many ms apart (0 = together) |
| `exit` | `"dissolve"` | `dissolve` · `none` | dissolve = the copies fade out together at the end · none = they are there to the last frame |
| `exit_ms` | `180` | 0–1500 | How long the dissolve takes, ms |
| `depth` | `0.5` | 0–1 | How far behind the speaker the copies stand: 0 = right next to him; higher = smaller, softer and a little darker |
| `spread` | `0.3` | 0.15–0.48 | sides: how far to the left and right the nearest copies stand, share of the frame width |
| `scale` | `1` | 0.5–1.2 | Size of the nearest copies, relative to the speaker |
| `mirror` | `false` | boolean | Mirror every other copy (they face different ways; text on clothes is mirrored too) |
| `opacity` | `1` | 0.2–1 | The copies' opacity (a trail fades by itself) |
| `takes` | — | list | multi_take: the other takes (1–4 video URLs, same camera position); `video_url` is take 1 |
| `audio` | `1` | value | multi_take: whose sound plays — the take's number (1 = video_url) or mix (all takes together). Captions and silence removal follow take 1's words |
| `length` | `"first"` | `first` · `longest` · `shortest` | multi_take: the video is as long as take 1 (first), the longest take, or the shortest |
| `shorter` | `"freeze"` | `freeze` · `loop` · `hide` | multi_take: a take shorter than the video freezes on its last frame, loops, or leaves (fades out) |
| `starts` | — | list | multi_take: seconds skipped at the start of each of `takes`, to line them up with take 1 (take 1 keeps its own clock — the captions follow its words; trim it with the edit's `trim`) |

GET `/v1/effects/clones` returns the same as JSON (with the full body schema). Every field has a default; numbers
outside their range are refused with the field's name.
