# Skill: Kinetic typography

No footage beyond the speaker: the video is carried by type. Colour cards take over the frame for a
sentence, a number lands as a mega headline, a key phrase gets a marker that wipes in, and punch-ins keep
the face alive in between. Cheap, because nothing is generated except music.

**Price:** 185–230 credits per finished minute · 30 seconds ≈ 125–155 credits
**Uses:** `/v1/ai/music` · `/v1/ai/sound-effects` · `/v1/studio/remove-silence` · `/v1/studio/edit`

Base URL: `https://apihub.co.il` · Auth: `Authorization: Bearer <key>` · Docs: `/docs`
Tag every call with the same `X-Tag: <job>` and read the bill from `GET /v1/usage?tag=<job>`.

**Model quality.** Every AI endpoint takes `quality`: `fast` · `balanced` (default) · `best`. Stay on
`balanced` unless the customer asked for the best — `best` on video is 4× the price.

---

## 1. Cut hard, transcribe

`POST /v1/studio/remove-silence` with `min_pause_ms: 300`, `padding_ms: 60`, `remove_fillers: true`.
Then transcribe the cut and pull the sentences.

## 2. Mark the beats

Walk the transcript and mark:

| what you find | what to build |
|---|---|
| a number, sum or percentage | white `panels` card + `texts` preset `mega` |
| a hard contrast ("אבל…") | white flash: `panels` 0.12 s, then a dark card |
| the punchline | `texts` preset `marker` — the box wipes in behind the words |
| a promise or claim | `texts` preset `hero`, 1.5–2 s |
| a list | `texts` preset `pill`, same position for every item |
| the CTA | dark `panels` + `hero` + `accent` |

Four to eight text elements in a minute. Two moving at once is noise.

## 3. Music only

`POST /v1/ai/music { "prompt": "driving minimal electronic, no vocals", "duration": <len+2>, "instrumental": true }`

## 4. Render

```jsonc
POST /v1/studio/edit
{
  "video_url": "<cut url>", "transcript_id": "<id>",
  "captions": { "style": { "preset": "classic", "size": 6.8, "active_color": "#D0F808",
    "max_words": 3, "max_lines": 1, "position": "bottom", "margin": 19, "side_margin": 7 } },
  "hook": { "text": "<the claim>", "duration": 3.0,
    "style": { "preset": "black", "font": "Rubik", "weight": 900, "size": 7.0, "margin": 12 } },
  "panels": [
    { "start": 11.0, "duration": 0.12, "color": "#FFFFFF", "fade_ms": 30 },
    { "start": 11.12, "duration": 2.4, "color": "#FFFFFF", "fade_ms": 60 },
    { "start": 24.0, "duration": 2.2, "color": "#050505", "opacity": 0.92, "fade_ms": 120 }
  ],
  "texts": [
    { "text": "2,400 לקוחות", "start": 11.3, "duration": 1.0, "preset": "mega", "style": { "color": "#111111", "y": 38 } },
    { "text": "בלי עובד אחד", "start": 12.3, "duration": 1.1, "preset": "marker", "style": { "y": 55, "rotate": -2 } },
    { "text": "זה כל הסוד", "start": 24.2, "duration": 1.8, "preset": "outline", "style": { "y": 34 } }
  ],
  "zoom": [ { "start": 17.0, "end": 19.0, "to": 1.2, "ease": "punch", "y": 0.35 } ],
  "music": { "url": "<music>", "volume": 0.3, "duck": false },
  "color": { "preset": "vivid" },
  "audio": { "normalize": true },
  "output": { "aspect_ratio": "9:16", "resolution": "1080", "fit": "crop", "quality": "high" }
}
```

A colour card with `opacity: 0.92` keeps a ghost of the speaker behind the type — usually better than
hiding them completely. `GET /v1/studio/text-styles` lists every preset, effect and exit.

## Spending less on the same video

- A generated **image** is ≈ 29 credits; a generated **4-second clip** is ≈ 120 (Fast) or ≈ 480 (Veo 3.1).
  A **Gemini Omni** clip (`model: "gemini-omni-1.1-flash"`: speech and sound made with the picture, readable
  text in the frame) runs 3–10 s, usually 10: ≈ 310 credits at 720p, ≈ 460 at 1080p — take it only when the shot
  must talk or show text.
  Two images and a zoom often read better than one clip that hides the speaker.
- A free photograph from `/v1/stock/search` costs nothing — use it for anything that exists in the real
  world (places, objects, documents) and generate only what does not exist.
- Music is ≈ 1.3 credits per second. One track reused across a series is the single easiest saving.
- Render `quality: "standard"` instead of `"high"` while you iterate; switch to `"high"` for the final.

**How to read the price.** Renders are billed per second of output, so cutting and captioning scale with
length. Everything that is *generated* — an image, a clip, a music track — is billed per asset, no matter how
long the video is. That is why half a minute is not half the price: a 30-second video with the same four
images and one music track costs nearly what a 60-second one costs. Real numbers, not estimates, come from
`GET /v1/usage?tag=<your tag>` after the job.
