# Skill: full/reels — "רילס מלא" (Complete video)

The everyday short: a punchy hook, big green-highlight captions, a hard silence cut, punch-in zooms on the question, the number and the punchline with a whoosh on each, and an original music bed.

**Includes:** hook · captions · music · silence cut · punch-in zooms · sound effects
**Built on:** hook `punch` ("זום פאנץ׳", `/skills/hook-punch.md`) + captions `hormozi` ("הורמוזי", `/skills/captions-hormozi.md`)
**Price:** 170–190 credits per finished minute · 30 s ≈ 90–105 credits
**Uses:** `/v1/studio/remove-silence` · `/v1/ai/music` · `/v1/ai/sound-effects` · `/v1/studio/edit`

Base URL: `https://apihub.co.il` · Auth: `Authorization: Bearer <API key>` · Docs: `/docs`
Send the same `X-Tag: <job name>` header on every call of one video; `GET /v1/usage?tag=<job name>` then
returns exactly what it cost. Times in request bodies are **seconds on the edited (output) timeline**.
Unknown fields are rejected with the name of the right field — read the error instead of guessing.
**Files are kept 24 hours** (renders, uploads, generated clips/images/music) — download the finished video.

**Models.** This template runs on the newest models: `quality: "best"` on every AI call — Veo 3.1 for clips,
Nano Banana Pro for images, ElevenLabs v3 for Hebrew voice. Each is priced per asset, so a 30-second video
costs almost as much as a 60-second one. `quality: "balanced"` is the cheaper cut of the same recipe.

---

## 1. Cut and transcribe

```jsonc
POST /v1/studio/remove-silence     // x-wait-ms: 110000
{ "video_url": "<source>", "language_code": "he", "min_pause_ms": 350, "padding_ms": 70, "remove_fillers": true,
  "output": { "resolution": "source", "aspect_ratio": "original", "quality": "high" } }
POST /v1/speech/transcripts        { "audio_url": "<cut url>", "language_code": "he" }   → transcript_id
GET  /v1/speech/transcripts/{id}/sentences                                              → the edit map (ms)
```

**Check the words against the speech before you use them.** Now and then the default model loses a phrase of
Hebrew: a second or more of talking with no words in the sentences, or words squeezed to zero length (`start` = `end`).
Transcribe the same cut again with `"speech_models": ["universal-2"]` (≈ 1 credit a minute), take its words for that
stretch, fix a misheard name (a brand, a product), and send the list as `"words": [{ "text", "start", "end" }]` (ms) in
the render instead of `transcript_id` — the captions are built from your words in the style's own rhythm.

**Everything below is timed on the cut video's clock.**

## 2. Assets (in parallel)

```jsonc
POST /v1/ai/music   { "prompt": "<mood, instruments, tempo — no vocals>", "duration": <video seconds + 2>, "instrumental": true }   // ≈ 0.8 credits/second
POST /v1/ai/sound-effects { "text": "smooth whoosh transition", "duration": 1 }                                             // ≈ 1 credit each
```

## 3. Plan from the sentences

`GET /v1/speech/transcripts/{id}/sentences` → every sentence with start/end. Pick: the hook line (the boldest
claim, 5–8 words, `*mark*` the payoff word), and 2–4 beats for a `zoom` punch-in (a question, a number, the
punchline). A whoosh 0.3 s before each zoom.

## 4. Render

```jsonc
POST /v1/studio/edit               // x-wait-ms: 110000
{
  "video_url": "<cut url>", "transcript_id": "<id>",
  "hook": { "text": "<the claim, *payoff*>", "duration": 3, "style": "punch" },
  "captions": { "style": "hormozi" },
  "zoom": [ { "start": 6.2, "end": 7.6, "to": 1.18, "ease": "punch", "y": 0.35 } ],
  "sounds": [ { "url": "<whoosh>", "start": 5.9, "volume": 0.5 } ],
  "music": { "url": "<music>", "volume": 0.3, "duck": false, "fade_in_ms": 600, "fade_out_ms": 2000 },
  "audio": { "normalize": true },
  "output": { "aspect_ratio": "9:16", "resolution": "1080", "fit": "crop", "quality": "high" }
}
```

**The example on /skills** (a 58-second phone video, 27.9.2026): the cut and its transcripts 65 credits, a 60-second track 46,
one whoosh 1, four zooms and the render 58 — **170 credits**, about 8 minutes (the cut ≈ 4.5, the render ≈ 3.5).

Send `x-wait-ms: 110000` to wait for the render in the same call; if the response is still
`processing`, poll `GET /v1/executions/{id}` until `status` is `completed` and read `output.url`.

## Check the bill

`GET /v1/usage?tag=<job name>` — per call, per operation and the total, in credits. Quote that to the
customer, not the estimate above.

## Rules that keep captions readable on every platform

- **Safe zone.** Keep text inside the middle 80% of the frame: `side_margin` ≥ 6 handles the sides; `margin`
  ≥ 12 keeps the bottom clear of the platform UI (username, buttons, progress bar).
- **A line never leaves the frame** — a line too wide for the side margins is set smaller automatically. Do
  not shrink the size yourself, wrap instead (`max_chars_per_line`).
- **Hebrew has no capitals** — keep `uppercase: false`; it only breaks Latin words mixed into a sentence.
- **Fonts.** `GET /v1/studio/fonts` lists the bundled families and which scripts they draw. A font that
  cannot draw the caption's language is swapped and reported in `warnings`.
- The customer's transcript wins: to fix a word, `GET /v1/speech/transcripts/{id}/captions`, edit the text,
  and send the list back as `captions.captions` — timing is kept when the word count is unchanged.
