# Skill: effect/video-in-text — "וידאו בתוך טקסט" (Video in text)

The video shows only through huge letters, then the letters zoom through and reveal the whole frame.
הסרטון נראה רק דרך אותיות ענקיות, ואז האותיות עושות זום פנימה וחושפות את כל הפריים.

Category: Text animations · אנימציות טקסט · a real preview: https://media.gpt.org.il/lookbook/effects/video-in-text.mp4?v=mv19exzc
Price: **60 credits per finished minute**: the render itself — 1 credit per second of 1080p output. Combined with captions, a hook or other effects: still one render, nothing more for combining.

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/video-in-text             // x-wait-ms: 110000
{
  "video_url": "https://media.gpt.org.il/samples/sample-he.mp4",
  "text": "וואו",
  "start": 0.1,
  "duration": 3.1
}
```

A normal render: `status: processing` → poll `GET /v1/executions/{id}` until `completed`, then read `output.url`.
Leave out `video_url` and the effect is drawn on a plain black canvas (9:16 unless `output.aspect_ratio` says otherwise).

When it plays: a stretch: `start` + `duration` (seconds of the finished video), or `at` (a word id) + `duration`, or `during` { from, to } (word ids).

## 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": "video-in-text",
      "params": {
        "text": "וואו"
      },
      "start": 0.1,
      "duration": 3.1
    }
  ],
  "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 |
|---|---|---|---|
| `text` | `"וואו"` | string | The word (short: 1–8 letters read best) |
| `size` | `34` | 5–60 | Letter size, % of the frame height |
| `font` | `"Heebo"` | string | Font family — GET /v1/studio/fonts |
| `color` | `"#0A0A0A"` | string | The plate round the letters |
| `y` | `50` | 5–95 | Height of the word, % from the top |
| `reveal` | `"zoom"` | `zoom` · `fade` · `none` | How the frame is revealed at the end: the letters zoom through · the plate fades · it stays |
| `reveal_ms` | `900` | 200–3000 | How long the reveal takes, ms (at the end of the span) |

GET `/v1/effects/video-in-text` 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.
