# Skill: Word Punch captions (high-energy)

The dominant look on TikTok and Reels: one or two words at a time, very large, centred, the spoken word
snapping in with a pop. Built for opinion, promo and motivational clips where every second must hit.
Pair it with the tightest cut the audio allows — the words themselves carry the rhythm.

**Captions only.** This skill uses two endpoints and nothing else: no AI images, no clips, no music, no
sound effects. Two calls, two renders, one finished video.

Base URL: `https://apihub.co.il` · Auth: `Authorization: Bearer <API key>` · Docs: `/docs`
Send `X-Tag: <job name>` on both calls, then `GET /v1/usage?tag=<job name>` tells you what it cost.

---

## 1. Cut hard

```jsonc
POST /v1/studio/remove-silence
{ "video_url": "<source>", "language_code": "he",
  "min_pause_ms": 250, "padding_ms": 40, "remove_fillers": true,
  "output": { "resolution": "source", "aspect_ratio": "original", "quality": "high" } }
```

250 ms / 40 ms is deliberately aggressive: it removes the breath between words, not only between sentences,
and lands near the 1.5–3 s cut rhythm this format lives on. Use the returned `url` and
`duration_seconds` for everything below — the clock has changed.

If the result feels choppy (the speaker is slow, or the room is noisy), go back to `min_pause_ms: 350`,
`padding_ms: 70`. Never go below 200 ms: words start clipping.

## 2. Render

```jsonc
POST /v1/studio/edit     // x-wait-ms: 110000
{
  "video_url": "<cut url>",
  "language_code": "he",
  "captions": { "style": {
    "font": "Heebo", "weight": 900, "size": 9.5,
    "color": "#FFFFFF", "active_color": "#FFE600",
    "outline": 15, "outline_color": "#000000", "shadow": 3,
    "animation": "pop", "max_words": 2, "max_lines": 1,
    "position": "center", "margin": 6, "side_margin": 7, "uppercase": false
  } },
  "hook": { "text": "<5–8 words, the boldest claim in the video>", "duration": 3.0,
    "style": { "preset": "black", "font": "Rubik", "weight": 900, "size": 7.4, "position": "top", "margin": 12, "animation": "pop" } },
  "audio": { "normalize": true },
  "output": { "aspect_ratio": "9:16", "resolution": "1080", "fit": "crop", "quality": "high" }
}
```

**Why these numbers**

- `size: 9.5` (9.5% of the frame height ≈ 180 px at 1080×1920) — far above the ~48 pt minimum for headlines.
- `max_words: 2`, one line, centred: the eye never travels, which is what makes this style feel fast.
- `animation: "pop"` scales the spoken word; `active_color` is the only colour on screen.
- `margin: 6` with `position: "center"` sits the block just under the middle — clear of the face and of the
  platform UI at the bottom.
- The hook is a black bar at the top for the first 3 s, the "headline overlay" that carries a silent view.

## 3. Variants

- **Neon:** `active_color: "#39FF14"`, `outline_color: "#000000"` — for gaming and tech.
- **One word:** `max_words: 1`, `size: 11` — maximum aggression, needs a fast speaker.
- **Brand colour:** set `active_color` to the brand and leave everything else.

## Rules that apply to every caption job

- **Safe zone.** Keep text inside the middle 80% of the frame. `side_margin: 7` does the sides; keep
  `margin` ≥ 14 so the platform UI (username, buttons, progress bar) never covers a word.
- **Contrast before decoration.** White text with a black outline reads on anything. Colour is for the
  spoken word only.
- **The line never leaves the frame** — a line too wide is set smaller automatically. Do not shrink it yourself.
- **Hebrew is not upper-cased** (`uppercase: false`); it has no capitals and the flag only breaks Latin words
  mixed into the sentence. For English-only videos `uppercase: true` is fine.
- **Fonts:** Heebo and Rubik (weight 900) for Hebrew, Montserrat for Latin. `GET /v1/studio/fonts` lists them.
- Never send a field that is not in the docs — unknown fields are rejected with the right name.

## What it costs

Transcription ≈ 1 credit per minute. Each render ≈ 1 credit per second of output, so a 60 s video that is
cut and then captioned ≈ 120 credits. Nothing else is billed: this skill generates nothing.
